Ошибка при закрытии ProgressDialog - E/ViewRootImpl: sendUserActionEvent() mView == null

Извините, я знаю, что этот вопрос задавался пару раз. Но я попробовал предложенное решение и не добился успеха.

В моем приложении для Android я начал случайным образом получать эту ошибку из ниоткуда, я не модифицировал код, пару раз он работал нормально, и теперь он показывает мне эту ошибку:

`E/ViewRootImpl: sendUserActionEvent() mView == null`

Ошибка при закрытии ProgressDialog - E/ViewRootImpl: sendUserActionEvent() mView == null

Это происходит, когда я вызываю свой класс Java, в котором я устанавливаю BluetoothConnectionService. В частности, это происходит, когда вызывается метод закрытия диалогового окна хода выполнения.

`public ConnectedThread(BluetoothSocket mSocket) {
        Log.d(TAG, "ConnectedThread: Starting");

        mmBTSocket = mSocket;
        InputStream mTempIn = null;
        OutputStream mTempOut = null;
        // dismiss the progressdialog when the connection is established.
        try{
            mProgressDialog.dismiss();
        } catch (NullPointerException e) {
            Log.e(TAG, "ConnectedThread: Couldn't dismiss progressDialogBox" + e.getMessage(), e);
        }
        try {
            mTempIn = mmBTSocket.getInputStream();
            mTempOut = mmBTSocket.getOutputStream();
        } catch (IOException e) {
            Log.e(TAG, "ConnectedThread: Failed to get I/O Stream: " + e.getMessage(), e);
        }
        mInStream = mTempIn;
        mOutStream = mTempOut;
    }`

В файле Dialog.java, я думаю, это происходит в этом методе.

`@Override
public void dismiss() {
    if (Looper.myLooper() == mHandler.getLooper()) {
        dismissDialog();
    } else {
        mHandler.post(mDismissAction);
    }
}`

Предыдущие предложения по этой ошибке, которые я нашел здесь, в stackoverflow, не сработали. Я попытался добавить следующий код в свой AndroidManifest, который не работал:

`       android:name = ".MainActivity"
        android:configChanges = "keyboardHidden|orientation|screenLayout|screenSize"
        android:label = "@string/app_name"`

Пожалуйста, любые предложения помогут, так как я почти закончил приложение до того, как это начало происходить, и я не могу понять, почему !!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
614
1

Ответы 1

Вам нужно проверить, становится ли ваш контекст нулевым. В основном это происходит, когда контекст или представление, на которое вы указываете, становятся нулевыми. Просто попробуйте реализовать следующие проверки перед вызовом этого:

 if ( getContext() != null && getView != null )
 {
      // do your stuff here
 }

Также вам необходимо обновить представления в основном потоке. Если вы не находитесь в основном потоке, вам следует реализовать обработчик для обновления компонентов пользовательского интерфейса. Посетите следующую ссылку для получения подробной информации:

https://developer.android.com/training/multiple-threads/communicate-ui

Сделайте следующее:

 Handler handler = new Handler(); // write in onCreate function

 handler.post(new Runnable() {
                @Override
                public void run() 
                {
                    // Update your UI components here
                }
            });    

Здравствуйте, спасибо за ваш ответ. Я добавил проверку getContext, и она не равна нулю. Я не могу проверить getView, так как у класса нет представления. У него также нет функции onCreate. Класс по существу идентичен этому ссылка на сайт. Аналогичная ошибка возникает в строке 230. Что касается объявления обработчика, где мне его объявить, если у меня нет функции onCreate?

markos14 28.01.2019 17:46

Замените эту строку: mProgressDialog.dismiss(); с mProgressDialog.dismiss(getContext()); после этого замените @Override public void dismiss() { if (Looper.myLooper() == mHandler.getLooper()) { dismissDialog(); } else { mHandler.post(mDismissAction); } } with: @Override public void reject(Context context) { if (Looper.myLooper() == mHandler.getLooper()) { if (context!=null){dismissDialog();} } else { mHandler.post( mDismissAction); } }

Muhammad Saad Rafique 28.01.2019 19:25

Это будет работать, если проблема находится в этой строке, как вы сказали, в противном случае вам придется отлаживать, чтобы добраться до точной точки, где находится исключение.

Muhammad Saad Rafique 28.01.2019 19:28

Где я должен реализовать метод переопределения отклонения? Я реализовал его в файле Dialog.java, на который меня вывел отладчик при обнаружении ошибки: (C:\...\Android\SDK\sources\android-22\android\app\Dialog.ja‌​va). Но это не влияет на мой код (т. е. при вызове dissmiss(getContext()) он по-прежнему не считает, что отклонение принимает контекст в качестве аргумента). Я также реализовал его в файле SDK Android-27 (версия compileSDK приложения), но ошибка все еще есть. Должен ли я реализовать это в другом месте? Почему отредактированный метод отклонения, который принимает обновление контекста, в другом моем классе?

markos14 29.01.2019 17:45

Другие вопросы по теме

Каждая карта в представлении карты имеет разную ширину
Мне нужен уникальный путь к файлу для вызова из Firebase DB
Как я могу иметь пульсацию при нажатии и другой передний план на выбранном виде карты?
Почему я получаю сообщение об ошибке "ArrayIndexOutOfBoundsException: length=0; index=0"?
Как изменить содержимое действия из IntentService, запущенного из другого действия?
Консоль Google Play запрещает загрузку или продвижение новых версий приложений в соответствии с конфиденциальной политикой разрешений
Веб-приложение скрывает панель навигации Android (виртуальную кнопку «Назад», домашний экран и т. д.) в Chrome (через javascript)
Как передать изменяющееся число в другой класс, чтобы он выполнял команду каждый раз, когда эта переменная изменяется?
Заполнить элемент RecyclerView данными из двух таблиц базы данных
Переключение между полноэкранным и не полноэкранным режимами, вызывающее смещение просмотра