最近做的项目中有一块东西,百思不得其解,然后还是解决了,小笔记。
问题:在非Activity的普通类中创建handler,再把handler传给其他的类,这时候我新new的其他类总是不走那一行,也就是我的新类总是空指针。
我的代码:
new Thread(){
public void run(){
Looper.prepare();
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msgType) {
case SocketStatus:
processType = ProcessType.valueOf(msg.arg1);
if (msg.obj != null && msg.obj instanceof StatusCode) {
status = (StatusCode) msg.obj;
}
break;
default:
break;
}
break;
};
Looper.loop();//11
Bclass= new Bclass(mContext, handler);//22
}
}.start();
现在的问题就是22那一行代码没有走,Bclass一直都是空指针报错。
我们都知道在子线程中创建Handler那必须得用Looper.prepare和Looper.loop,我是用到了,但是问题是,loop表明他是循环,也就是说他一直在循环Looper.prepare和Looper.loop之间的代码,并没有走到22那一行代码,所以解决方法是:把22放在11的上面。