Я вызываю класс 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();
}
}
Что я делаю неправильно?
http://stackoverflow.com/a/5009894/1320616 –
Окончательный LoginUiThreadHandler loginHandler = новый LoginUiThreadHandler (getMainLooper ()). –
, если вы хотите отправить вызов 'Message'' sendMessage (m) ', а не' handleMessage (m) ', также не используйте' setData' только для одного int, см. Все методы 'getMessage' – pskink