無報錯,但是沒內容 為什么
public class page extends Activity {
? ?private ListView mListView;
? ?private static String URL = "http://www.xianlaiwan.cn/api/teacher?type=4&num=30";
? ?@Override
? ?protected void onCreate(Bundle savedInstanceState) {
? ? ? ?super.onCreate(savedInstanceState);
? ? ? ?setContentView(R.layout.news_lise_view);
? ? ? ?mListView = (ListView) findViewById(R.id.NewsList);
? ? ? ?new NewsAsyncTask().execute(URL);
? ?}
? ? ? /*將URL對應的JSON格式轉化為我們所封裝的NewBean*/
? ?private List<NewsBean> getJsonData(String url) {
? ? ? ?List<NewsBean> newsBeanList = new ArrayList<>();
? ? ? ?try {
? ? ? ? ? ?String jsonString = readStream(new URL(url).openStream()); ? /*此句和URL.Connection().getInputStream()相同可以根據URL直接聯網使用,返回值為InputStream*/
? ? ? ? ? // Log.d("xys",jsonString);
? ? ? ? ? ?JSONObject jsonObject;
? ? ? ? ? ?NewsBean newsBean;
? ? ? ? ? ?try {
? ? ? ? ? ? ? ?jsonObject = new JSONObject(jsonString); ? ? ? //將json的格式的字符串轉化為對象,我們要取出的就是這個對象的內容
? ? ? ? ? ? ? ?JSONArray jsonArray = new JSONObject().getJSONArray("data"); ? ? ?//先取出data這個json數組
? ? ? ? ? ? ? ?for (int i =0;i<jsonArray.length();i++){ ? ? ? ? ? ? ? ? //遍歷整個數組,取出需要的內容
? ? ? ? ? ? ? ? ? ?jsonObject = jsonArray.getJSONObject(i); ? ? ? ? ? //先把數組里的內容都取出來,然后把這些值傳遞給newsbean
? ? ? ? ? ? ? ? ? ?newsBean = new NewsBean();
? ? ? ? ? ? ? ? ? ?newsBean.newsIConUrl = jsonObject.getString("picSmall"); ? ? ? //獲取json里的圖片
? ? ? ? ? ? ? ? ? ?newsBean.newstitle = jsonObject.getString("name");
? ? ? ? ? ? ? ? ? ?newsBean.newscontent = jsonObject.getString("description");
? ? ? ? ? ? ? ? ? ?newsBeanList.add(newsBean); ? ? ?//屬性設置完后,就把封裝好的newsBean塞到集合里,準備添加到適配器上
? ? ? ? ? ? ? ?}
? ? ? ? ? ?} catch (JSONException e) {
? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ?}
? ? ? ?} catch (IOException e) {
? ? ? ? ? ?e.printStackTrace();
? ? ? ?}
? ? ? ?return newsBeanList;
? ?}
? ? ? ? ? ? /*通過is 解析網頁返回的數據*/
? ?private String readStream(InputStream is){ ?//處理字節流的抽象類,這個是輸入流
? ? ? ?InputStreamReader isr; ? ? ? ? ? ? ? ? /*InputStreamReader 是字節流通向字符流的橋梁,它將字節流轉換為字符流.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?OutputStreamWriter是字符流通向字節流的橋梁,它將字符流轉換為字節流.*/
? ? ? ? String result = "";
? ? ? ?try {
? ? ? ? ? ?String line = "";
? ? ? ? ? ?isr =new InputStreamReader(is,"utf-8"); ? ? ? ? ? ? //將字節流轉換為字符流 ?這個只能逐行讀取
? ? ? ? ? ?BufferedReader br = new BufferedReader(isr); ? ? ? ?//將字符流以BufferedReader的形式讀取出來
? ? ? ? ? ?while ((line =br.readLine()) !=null){
? ? ? ? ? ? ? ?result += line; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*BufferedReader BufferedWriterBufferedReader 由Reader類擴展而來,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?提供通用的緩沖方式文本讀取,readLine讀取一個文本行,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?從字符輸入流中讀取文本,緩沖各個字符,從而提供字符、數組和行的高效讀取。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BufferedWriter? 由Writer 類擴展而來,提供通用的緩沖方式文本寫入, newLine使用平臺自己的行分隔符*/
? ? ? ? ? ?}
? ? ? ?} catch (UnsupportedEncodingException e) {
? ? ? ? ? ?e.printStackTrace();
? ? ? ?} catch (IOException e) {
? ? ? ? ? ?e.printStackTrace();
? ? ? ?}
? ? ? ?return result;
? ?}
? ? ? ? ? ? ? ? ?/*實現了網絡的異步訪問*/
//NewsBean封裝item,List存儲無數個List,把List裝載到Adapter里,通過Adapter和listView相連
? ?class NewsAsyncTask extends AsyncTask <String,Void,List<NewsBean>>{
? ? ? ?@Override
? ? ? ?protected List<NewsBean> doInBackground(String... params) {
? ? ? ? ? ?return getJsonData(params[0]); //請求的網址只有一個 ?params是一個數組
? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?@Override
? ? ? ? ? ? ? ? ? ? ?protected void onPostExecute(List<NewsBean> newsBean) {
? ? ? ? ? ? ? ? ? ? ? ? ?super.onPostExecute(newsBean);
? ? ? ? ? ? ? ? ? ? ? ? ?NewsAdapter adapter =new NewsAdapter(page.this,newsBean);
? ? ? ? ? ? ? ? ? ? ? ? ?mListView.setAdapter(adapter);
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ?}
}
2017-05-22