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);
  }
 }

posted @ 2011-10-15 14:08  奶酪@橙汁  阅读(730)  评论(0)    收藏  举报