个人需求:网络请求等操作需要放在子线程中执行 ,不能放在主线程。而子线程请求完毕需要更新UI信息。

1、定义Handler  接收子线程的消息,当收到消息时执行UI更新。

final Handler mHandler = new Handler() {

@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
          //执行UI更新( 根据个人需求 )
break;
default:
break;
}
}

};

2、开启一个子线程,执行网络请求或者其他操作。(放主线程执行会阻塞,报错,故需放在子线程执行) 请求完毕拿到数据后,发送消息到Handle上,让它执行更新UI

  new Thread(){
@Override
public void run() {
super.run();
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();
Log.i("路过", "执行" + json);
bean_jsondata = gson.fromJson(json, Bean.class);
Log.i("路过", bean_jsondata.getTime() + "---" + bean_jsondata.getType() + "---" + bean_jsondata.getText());

mHandler.sendEmptyMessage(0);

//需要数据传递,用下面方法;
Message msg =new Message();
// msg.obj = "UI更新";//可以是基本类型,可以是对象,可以是List、map等;消息传递
mHandler.sendMessage(msg);

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

}
}.start();