Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Can';t在未调用Looper.prepare()的线程内创建处理程序(在处理程序()内)_Android_Multithreading_Handler - Fatal编程技术网

Android Can';t在未调用Looper.prepare()的线程内创建处理程序(在处理程序()内)

Android Can';t在未调用Looper.prepare()的线程内创建处理程序(在处理程序()内),android,multithreading,handler,Android,Multithreading,Handler,我正在从后台线程调用处理程序类。在Handler类中,我试图显示一个toast。从理论上讲,它应该能够完美地工作,因为Handler是将UI任务转发到主UI线程的队列。然而,在我的情况下,我得到了例外 private void firstTimeLogin() { final LoginUiThreadHandler loginHandler = new LoginUiThreadHandler(); new Thread(new Runnable() {

我正在从后台线程调用处理程序类。在Handler类中,我试图显示一个toast。从理论上讲,它应该能够完美地工作,因为Handler是将UI任务转发到主UI线程的队列。然而,在我的情况下,我得到了例外

private void firstTimeLogin() {

        final LoginUiThreadHandler loginHandler = new LoginUiThreadHandler();

        new Thread(new Runnable() {
            @Override
            public void run() {
                Message m = loginHandler.obtainMessage();

                Bundle bund = new Bundle();
                bund.putInt("loginResult", 1);
                m.setData(bund);

                loginHandler.handleMessage(m);
            }
        }).start();
    }

    private class LoginUiThreadHandler extends Handler {

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            int loginResult = msg.getData().getInt("loginResult");
            if(loginResult == 0) 
                Toast.makeText(getActivity().getApplicationContext(), "Login success", Toast.LENGTH_SHORT).show();

        }
    }
我做错了什么?

替换为-

LoginUiThreadHandler loginHandler=新的LoginUiThreadHandler(Looper.getMainLooper())

而不是-


LoginUiThreadHandler loginHandler=新的LoginUiThreadHandler()

final LoginUiThreadHandler loginHandler=new LoginUiThreadHandler(getMainLooper())。如果要发送
消息
调用
sendMessage(m)
,而不是
handleMessage(m)
,也不要只对一个int使用
设置数据
,请参阅所有
获取消息
方法,您需要使用参数Looper在LoginUiThreadHandler中创建构造函数,并作为-LoginUiThreadHandler(Looper l){super(l);}传递给super(Looper)