android Handler给出了Null对象引用错误

时间:2017-01-06 13:54:46

标签: android handler android-handler android-handlerthread

我的进程使用Handler更新了UI线程中的ProgressBar。但是它给出了这样的错误 .Handler.sendMessage(android.os.Message)'对空对象引用
请检查我的代码

public class MainActivity extends AppCompatActivity {
    Handler handler;
    Thread thread;
    ProgressBar prb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        prb=(ProgressBar) findViewById(R.id.progress);
        thread=new Thread(new MyThread());
        thread.start();
        handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                prb.setProgress(msg.arg1);
            }
        };
    }


    class MyThread implements Runnable{

        @Override
        public void run() {
            for (int i=1;i<10;i++) {
                Message message = Message.obtain();
                message.arg1=i;
                handler.sendMessage(message);
                try {
                    thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

这清楚地表明错误在这里形成,

handler.sendMessage(消息);

2 个答案:

答案 0 :(得分:2)

在您的代码中,您拥有自己的名为Thread的{​​{1}}实现。 在此实现中,您使用全局变量MyThread的引用。

问题是:在尝试对handler变量进行实例化之前,您正试图实例化MyThread。 当您致电handler

时,handlernull

解决方案很简单:

初始化thread.start()

后,您需要启动线程

答案 1 :(得分:0)

由于您在 function uncheckAll() { angular.forEach(ocw.parents,function(parent,key){ parent.isOpenValue=false; } } 之前启动新主题,handler=new Handler()在开头会为空。将onCreate更改为此

handler