onBackPressed при установке ArrayAdapter из фонового потока

Я пытаюсь обновить свой поток пользовательского интерфейса из runnable. Он работает нормально, пока я не прерву метод, нажав кнопку «Назад». Когда это происходит, он вылетает из NPE. Мне нужен способ остановить обновление этого потока, если нажата кнопка «Назад». Спасибо!

                  view.post ( uiRun = new Runnable() {
                        public void run() {
                                /* UI update */

                                areasAdapter2 = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, CL);
                                areasAdapter2.setDropDownViewResource(android.R.layout.simple_list_item_1);
                                mContactLog.setAdapter(areasAdapter2);
                        }
                    });

05-10 18:26:00.610 13511-13511/com.example.bryan.customer84 E/UncaughtException: java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.Object android.content.Context.getSystemService(java. lang.String)» для ссылки на нулевой объект в android.widget.ArrayAdapter.init(ArrayAdapter.java:310) в android.widget.ArrayAdapter.(ArrayAdapter.java:153) в com.example.bryan.customer84.PhoneSearch$9 .run(PhoneSearch.java:606) в android.os.Handler.handleCallback(Handler.java:739) в android.os.Handler.dispatchMessage(Handler.java:95) в android.os.Looper.loop(Looper.java:145) в android.app.ActivityThread.main(ActivityThread.java:5835) в java.lang.reflect.Method.invoke(собственный метод) в java.lang.reflect .Method.invoke(Method.java:372) в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) )


person Community    schedule 10.05.2017    source источник
comment
Можете поделиться журналом сбоев?   -  person Isaac Urbina    schedule 11.05.2017
comment
поэтому, если вы нажмете кнопку «Назад», действие будет уничтожено, и вы попытаетесь обновить адаптер и получите действие, которое может быть нулевым.   -  person Isaac Urbina    schedule 11.05.2017
comment
Да, все еще работает поток, который обновляет адаптер после уничтожения фрагмента.   -  person    schedule 11.05.2017
comment
добавить нулевую проверку внутри run() для getActivity() != null   -  person Isaac Urbina    schedule 11.05.2017
comment
Потрясающий! Работал отлично! Спасибо!   -  person    schedule 11.05.2017


Ответы (1)


Вы пытаетесь получить доступ к активности, которая уже была собрана мусором... добавьте нулевую проверку внутри run() для getActivity() != null

person Isaac Urbina    schedule 11.05.2017
comment
Спасибо, это то, что я сделал, и это сработало как шарм. - person ; 11.05.2017