2016-02-18 4 views
0

Я вызываю класс Handler из фонового потока. В классе Handler я пытаюсь показать тост. Теоретически он должен работать безупречно, потому что Handler - это очередь, которая перенаправляет задачи пользовательского интерфейса в основной поток пользовательского интерфейса. Однако в моем случае я получаю исключение.Не удается создать обработчик внутри потока, который не вызвал Looper.prepare() внутри Handler()

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(); 

     } 
    } 

Что я делаю неправильно?

+0

http://stackoverflow.com/a/5009894/1320616 –

+0

Окончательный LoginUiThreadHandler loginHandler = новый LoginUiThreadHandler (getMainLooper ()). –

+1

, если вы хотите отправить вызов 'Message'' sendMessage (m) ', а не' handleMessage (m) ', также не используйте' setData' только для одного int, см. Все методы 'getMessage' – pskink

ответ

-1

Заменить -

LoginUiThreadHandler loginHandler = new LoginUiThreadHandler(Looper.getMainLooper());

вместо OF-

LoginUiThreadHandler loginHandler = new LoginUiThreadHandler();

+0

Дает ошибку, поэтому can not do – user2498079

+0

Затем вам нужно создать конструктор в LoginUIThreadHanlder с параметром Looper и перейти к супер (петлере) as- LoginUiThreadHandler (Looper l) { super (l); } – Shahzadah

Смежные вопросы

 Смежные вопросы