当前位置: 代码迷 >> Android >> 本人初学者,请问一个handleMessage不执行的有关问题
  详细解决方案

本人初学者,请问一个handleMessage不执行的有关问题

热度:74   发布时间:2016-05-01 21:03:40.0
本人菜鸟,请教一个handleMessage不执行的问题
第一次执行activity时候handleMessage是执行的,finish()之后,再执行activity,handleMessage就不执行了,不知道为什么,下面是代码:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.showview);

looper = Looper.myLooper();
handler = new EventHandler(looper);
}

class EventHandler extends Handler {
public EventHandler(Looper looper) {
super(looper);
}

@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
userOnLine(msg.obj.toString());
break;
case 1:
userOffLine(msg.obj.toString());
break;
}
}
}

------解决方案--------------------
looper = Looper.myLooper();
handler = new EventHandler(looper);
把这段代码放到onResume()里执行应该就好了
------解决方案--------------------

前面的回答有误,我重新改了下 你试下看
你可以创建一个线程队列试下,将消息添加到线程队列当中,帮你改造下吧 你试下看。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.showview);
//创建Thread对象,并调用start()方法
Thread th = new Thread(rb);
th.start();
};

class EventHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
userOnLine(msg.obj.toString());
break;
case 1:
userOffLine(msg.obj.toString());
break;
}
}
//创建线程
private Runnable rb = new Runnable(){
@Override
public void run(){//实现run方法
Message msg = new Message();
msg.what =0;
//向handler发送消息
handler.sendMessage(msg);

}

}



------解决方案--------------------
楼上的,如果只要一个what,那直接 handler.sendEmptyMessage(0);就可以了。
楼主已经正确接收到Handler的消息了,只是报了空指针异常:
06-04 13:27:24.753: ERROR/AndroidRuntime(8504): java.lang.NullPointerException
06-04 13:27:24.753: ERROR/AndroidRuntime(8504): at com.yuhong.android.ShowView$1.dispatchMessage(ShowView.java:76)
79行:userOnLine(msg.obj.toString());
从这里看出来有可能是msg为空 或者obj为空,所以在发送Message时用这样的方式:
Java code
    private Handler handler = new Handler() {        public void dispatchMessage(android.os.Message msg) {            switch (msg.what) { // 这里是可以收到值的            //接下来就要使用到msg.obj对象,如果在发送消息时没有对它进行赋值就会抛空指针了            case 0:                userOnLine(msg.obj.toString());                break;            case 1:                userOffLine(msg.obj.toString());                break;            default:                break;            }        };    };    protected void onCreate(android.os.Bundle savedInstanceState) {        Message message=new Message();        //设置下列两个属性        message.what=0;        message.obj="test";        handler.sendMessage(message);    };