1) 封装HttpUrlConnection网络请求工具类,进入页面时开启新线程,使用HttpUrlConnection进行网络请求,加载网络数据并解析,通过Handler更新UI。
public class MainActivity extends AppCompatActivity {
private ListView list_view;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0) {
String json = (String) msg.obj;
Gson gson = new Gson();
newsbean newsbean = gson.fromJson(json, newsbean.class);
List<com.example.bean.newsbean.DataBean> data = newsbean.getData();
myadapter myadapter = new myadapter(MainActivity.this, data);
list_view.setAdapter(myadapter);
list_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(MainActivity.this, Second.class);
startActivity(intent);
finish();
}
});
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//解析
list_view = findViewById(R.id.list_view);
getservices();
}
private void getservices() {
new Thread(){
@Override
public void run() {
super.run();
String path="http://www.xieast.com/api/news/news.php?page=1";
try {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setRequestMethod("GET");
if(connection.getResponseCode()==200){
InputStream inputStream = connection.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int len =0;
while((len=inputStream.read(bytes))!=-1){
bos.write(bytes,0,len);
}
inputStream.close();
bos.close();
String json = bos.toString();
Message message = new Message();
message.what=0;
message.obj=json;
Log.i("xxx",json);
handler.sendMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
2) 添加条目点击事件,当点击列表条目时,跳转到第二个页面,显示效果和第一个页面相同,封装HttpClient网络请求工具类,第二个页面使用AsyncTask和HttpClient完成网络请求并更新UI
public class Second extends AppCompatActivity {
private ListView list_view1;
String url="http://www.xieast.com/api/news/news.php?page=2";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
list_view1 = findViewById(R.id.list_view1);
//异步解析
Myasync myasync = new Myasync();
myasync.execute(url);
}
public class Myasync extends AsyncTask<String,Integer,String>{
@Override
protected String doInBackground(String... params) {
DefaultHttpClient client = new DefaultHttpClient();
String path =params[0];
HttpGet get = new HttpGet(path);
try {
HttpResponse response = client.execute(get);
if(response.getStatusLine().getStatusCode()==200){
//从服务器获取输入流
InputStream inputStream = response.getEntity().getContent();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
inputStream.close();
bos.close();
String json = bos.toString();
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
news1bean news1bean = gson.fromJson(s, news1bean.class);
final List<com.example.bean.news1bean.DataBean> data = news1bean.getData();
my1adapter my1adapter = new my1adapter(Second.this,data);
list_view1.setAdapter(my1adapter);
list_view1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(Second.this,data.get(i).getUrl(),0).show();
Intent intent = new Intent(Second.this, Three.class);
intent.putExtra("url", data.get(i).getUrl());
startActivity(intent);
finish();
}
});
}
}
}
3) 当点击第二个页面的条目时,跳转到详情页并将url传递过去,使用WebView加载出详情
public class Three extends AppCompatActivity {
private WebView webview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_three);
Intent intent = getIntent();
webview = findViewById(R.id.webview);
webview.loadUrl(intent.getStringExtra("url"));
}
}