#android #multithreading #handler
#Android #многопоточность #обработчик
Вопрос:
Я использую следующий код, чтобы установить поток для действия кнопки.
public void onCreate(Bundle savedInstanceState) {
.........................
..........................
btnUpdateNow.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Thread updateThread = new Thread() {
Handler uiHandle;
@Override
public void run() {
GetDetailsUpdate getDetailsUpdate = new GetDetailsUpdate(
strUserId, strPassword,
strUDID,
getApplicationContext());
uiHandle.sendEmptyMessage(0);
}
};
updateThread.start();
Handler uiHandler = new Handler(){
@Override
public void handleMessage (Message msg){
loader.setVisibility(View.INVISIBLE);
}
};
}
}
}
Но это выдает следующую ошибку.
05-27 17:35:11.580: ERROR/AndroidRuntime(4555): Uncaught handler: thread Thread-11 exiting due to uncaught exception
05-27 17:35:11.580: ERROR/AndroidRuntime(4555): java.lang.NullPointerException
В чем проблема в моем коде?
Ответ №1:
Вы определили свой Обработчик дважды: в классе thread и в OnClickListener. Итак, вы инициализируете не ту переменную, которую используете. Выполните следующие шаги:
Во-первых, удалите декларацию отсюда:
Thread updateThread = new Thread() {
Handler uiHandle;
Во-вторых, определите свой обработчик в классе activity, а не в OnClickListener.
Ответ №2:
Ваш updateThread использует uiHandle:
uiHandle.sendEmptyMessage(0);
Но во всей вашей реализации потока эта переменная field никогда не устанавливается ни на что, поэтому она равна null.