使用
更新UI线程方法;
message发生数据,在handler里提取处理,然后更新UI
其中 message发生数据是在子线程里发送的,
handler是在主线程里获取到的数据。
Handler myhandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
textView.setText(msg.obj.toString());
}
};
message 发送数据如下,在子线程里;
Message message=Message.obtain();
message.obj=response.body().string();
myhandler.sendMessage(message);
如果多个消息可以设置message.what
然后在handleMessage方法下面进行判断:
switch(msg.what){
case 0:
// 0就是message.what设置的 message.what=0;
break;
case 1:
break:
}
完整代码(有多种写法,只写一种):
public class activity extends AppCompatActivity {
public TextView tv;
public Button bt;
Handler myhandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what){
case 1:
tv.setText(msg.obj.toString());
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_activity);
tv= (TextView) findViewById(R.id.textview);
bt=(Button) findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
Message message = Message.obtain();
message.obj = "handler message 发送数据更新UI";
message.what = 1;
myhandler.sendMessage(message);
}
}).start();
}
});
}
}
基本就是这样
更新UI另一个方法runOnUiThread;用法 在子线程的
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText("runOnUiThread");
}
});
}
就这样 亲测,可用