本人菜鸟,请教一个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时用这样的方式:
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); };