网络请求json数据

public class MainActivity extends AppCompatActivity {
private ListView listView;
private NewsAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

listView = findViewById(R.id.list);
adapter = new NewsAdapter(this);
listView.setAdapter(adapter);

findViewById(R.id.urlconnection).setOnClickListener(new View.OnClickListener() {
  @Override public void onClick(View v) {
    if (!hasActiviteNetwork()) {
      Toast.makeText(MainActivity.this, "没有可用的网络", Toast.LENGTH_LONG).show();
      startActivity(new Intent(Settings.ACTION_SETTINGS));
      return;
    }
    new Thread(new Runnable() {
      @Override public void run() {
        requestData(
            "http://www.xieast.com/api/news/news.php?type=top&page=1&tdsourcetag=s_pcqq_aiomsg");
      }
    }).start();
  }
});

}

private boolean hasActiviteNetwork() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isAvailable();
  }



private Handler handler = new Handler(new Handler.Callback() {
    @Override public boolean handleMessage(Message msg) {
      //datas.addAll((List<NewsRespond.NewsItem>) msg.obj);
      adapter.setDatas((List<NewsRespond.NewsItem>) msg.obj);
      //adapter.notifyDataSetChanged();
      return true;
    }
  });



private void requestData(String urlString) {
    try {
      //1 地址
      URL url = new URL(urlString);
      //2 打开连接
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
      //请求方法 超时
      httpURLConnection.setRequestMethod("GET");
      //连接超时
      httpURLConnection.setConnectTimeout(5000);
      //读取超时
      httpURLConnection.setReadTimeout(5000);
      //请求状态
      int responseCode = httpURLConnection.getResponseCode();
      if (responseCode == 200) {
        //读取流
        String result = stream2String(httpURLConnection.getInputStream());
        NewsRespond respond = new Gson().fromJson(result, NewsRespond.class);
        //更新 ui
        handler.sendMessage(handler.obtainMessage(0, respond.data));
      }
      //关闭
      httpURLConnection.disconnect();
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

//将返回数据流转换成string

private String stream2String(InputStream is) {
    StringBuilder sb = new StringBuilder();
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));

    try {
      for (String tmp = reader.readLine(); tmp != null; tmp = reader.readLine()) {
        sb.append(tmp);
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        reader.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }

    return sb.toString();
  }

/*class NewsAdapter extends BaseAdapter {

@Override public int getCount() {
  return datas.size();
}

@Override public NewsRespond.NewsItem getItem(int position) {
  return datas.get(position);
}

@Override public long getItemId(int position) {
  return position;
}

@Override public View getView(int position, View convertView, ViewGroup parent) {
  ViewHolder vh;
  if (convertView != null) {
    vh = (ViewHolder) convertView.getTag();
  } else {
    vh = new ViewHolder();
    convertView = LayoutInflater.from(MainActivity.this)
        .inflate(R.layout.item_news, null);// listView, false
    // id 2 view
    vh.title = convertView.findViewById(R.id.title);
    vh.date = convertView.findViewById(R.id.time);
    convertView.setTag(vh);
  }
  //数据
  NewsRespond.NewsItem newsItem = datas.get(position);
  vh.title.setText(newsItem.getTitle());
  vh.date.setText(newsItem.getDate());
  return convertView;
}

class ViewHolder {
  public TextView title;
  public TextView date;
}

}*/
}

猜你喜欢

转载自blog.csdn.net/FanRQ_/article/details/82972970