android中子线程运行后调用主线程中的组件
android中所有的组件都是运行在主线程之中,当子线程中想调用主线程中的view组件时,则会出现exception,通常可以通过handler消息机制来出来,也就是子线程运行完成以后继续跳到主线程中去运行,通过Looper looper = Looper.myLooper();来获得主线程,重新写一个类继承Handler。
程序代码:
主线程之中:
new Thread(new Runnable() {
@Override
public void run() {
Message message = Message.obtain();
message.obj = rs;
// 通过Handler来通知view的改变
messageHandler.sendMessage(message);
}
}).start();
继承Handler 类:
// 处理主进程的
class MessageHandler extends Handler {
public MessageHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
commit.setClickable(true);
System.out.println(msg.obj + " " + msg.obj.toString().equals("1"));
if (msg.obj.equals("1")) {
//主线程中组件的利用 代码
} else if(msg.obj.equals("0")){
Toast.makeText(ShowShopping.this.getApplicationContext(),
"图片上传失败!由于网络原因!", Toast.LENGTH_SHORT).show();
} else if(msg.obj.equals("success")){
Toast.makeText(
ShowShopping.this
.getApplicationContext(),
"发表成功", Toast.LENGTH_SHORT).show();
} else if(msg.obj.equals("fail")){
Toast.makeText(
ShowShopping.this
.getApplicationContext(),
"发表不成功", Toast.LENGTH_SHORT).show();
commit.setVisibility(View.VISIBLE);
commitBar.setVisibility(View.INVISIBLE);
}
super.handleMessage(msg);
}
}

浙公网安备 33010602011771号