Извините, я знаю, что этот вопрос задавался пару раз. Но я попробовал предложенное решение и не добился успеха.
В моем приложении для Android я начал случайным образом получать эту ошибку из ниоткуда, я не модифицировал код, пару раз он работал нормально, и теперь он показывает мне эту ошибку:
`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"`
Пожалуйста, любые предложения помогут, так как я почти закончил приложение до того, как это начало происходить, и я не могу понять, почему !!




Вам нужно проверить, становится ли ваш контекст нулевым. В основном это происходит, когда контекст или представление, на которое вы указываете, становятся нулевыми. Просто попробуйте реализовать следующие проверки перед вызовом этого:
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
}
});
Замените эту строку: 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); } }
Это будет работать, если проблема находится в этой строке, как вы сказали, в противном случае вам придется отлаживать, чтобы добраться до точной точки, где находится исключение.
Где я должен реализовать метод переопределения отклонения? Я реализовал его в файле Dialog.java, на который меня вывел отладчик при обнаружении ошибки: (C:\...\Android\SDK\sources\android-22\android\app\Dialog.java). Но это не влияет на мой код (т. е. при вызове dissmiss(getContext()) он по-прежнему не считает, что отклонение принимает контекст в качестве аргумента). Я также реализовал его в файле SDK Android-27 (версия compileSDK приложения), но ошибка все еще есть. Должен ли я реализовать это в другом месте? Почему отредактированный метод отклонения, который принимает обновление контекста, в другом моем классе?
Здравствуйте, спасибо за ваш ответ. Я добавил проверку getContext, и она не равна нулю. Я не могу проверить getView, так как у класса нет представления. У него также нет функции onCreate. Класс по существу идентичен этому ссылка на сайт. Аналогичная ошибка возникает в строке 230. Что касается объявления обработчика, где мне его объявить, если у меня нет функции onCreate?