之前子线程里面UI线程,或者子线程请求完毕,发消息给Handler更新UI。这些做法比较麻烦,代码量又多。 后看到异步任务,里面执行网络请求、UI更新等。直接一步到位。

1、百度看得一种写法,定一个类继承AsyncTask,实现他的三个方法。然后调用这个类执行。自个人感觉略显呆板,但可抽象出去一个类中,根据需求吧:

使用:在需要用的地方 new MyAsyncTask().execute();//执行即可
异步类
class MyAsyncTask extends AsyncTask  {

@Override
protected void onPreExecute() { //onPreExecute用于异步处理前的操作
super.onPreExecute();
Toast.makeText(AsyncTask_Aty.this, "开始异步任务", Toast.LENGTH_SHORT).show();
}

@Override
protected Object doInBackground(Object[] params) {//执行网络操作、文件读写等耗时操作.(放在异步中是防止主线程阻塞,安卓某个版本后必须写在子线程或者异步中了)
//里面是我需要的网络请求,不用管。如有需要写你自己的即可。
OkHttpClient okHttpClient = new OkHttpClient();

FormBody body = new FormBody.Builder()
.add("action", "timeline")//传递键值对(参数)
.build();
Request request = new Request.Builder() //URL 表单 绑定 然后执行execute
.url(url)
.post(body)
.build();
try {
Response response = okHttpClient.newCall(request).execute();
json = response.body().string();
bean_jsondata = gson.fromJson(json, Bean.class);
Log.i("路过", "执行" + json + "---" + bean_jsondata.getTime() + "---" + bean_jsondata.getType() + "---" + bean_jsondata.getText());

} catch (IOException e1) {
e1.printStackTrace();
}
return params;
}

//onPostExecute用于UI的更新.此方法的参数为doInBackground方法返回的值.
protected void onPostExecute(Object params) {//需要把Object的数据传递进来,如果括号内参数是空的不会调用这个方法更新UI
time.setText(bean_jsondata.getTime());
type.setText(bean_jsondata.getType());
text.setText(bean_jsondata.getText());
}
}

2、第二种是直接一个方法实现AsyncTask的doInBackground(执行网络请求或者其他操作)、onPostExecute(执行UI更新),然后调用这个方法。

使用:在需要的地方调用showHistoryDetail();即可
异步方法
private void
showHistoryDetail() {
new AsyncTask<Void, Void, String>() {

@Override
protected String doInBackground(Void... params) {//请求
OkHttpClient okHttpClient = new OkHttpClient();

FormBody body = new FormBody.Builder()
.add("action", "timeline")//传递键值对(参数)
.build();
Request request = new Request.Builder() //URL 表单 绑定 然后执行execute
.url(url)
.post(body)
.build();
try {
Response response = okHttpClient.newCall(request).execute();
json = response.body().string();
bean_jsondata = gson.fromJson(json, Bean.class);
Log.i("路过", "执行" + json + "---" + bean_jsondata.getTime() + "---" + bean_jsondata.getType() + "---" + bean_jsondata.getText());

} catch (IOException e1) {
e1.printStackTrace();
}
return String.valueOf(params);
}

@Override
protected void onPostExecute(String params) {//更新UI
time.setText(bean_jsondata.getTime());
type.setText(bean_jsondata.getType());
text.setText(bean_jsondata.getText());
}
}.execute();

}