Проблема с обработчиком потоков Android

#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.