Java 解除ProgressDialog时出错-E/ViewRootImpl:sendUserActionEvent()mView==null

Java 解除ProgressDialog时出错-E/ViewRootImpl:sendUserActionEvent()mView==null,java,android,android-studio,bluetooth,Java,Android,Android Studio,Bluetooth,抱歉,我知道这个问题已经被问过好几次了。 但我尝试了建议的解决方案,但没有成功 在我的Android应用程序中,我不知从何处随机发现了这个错误,我没有修改代码,它运行了好几次,现在它向我显示了这个错误: `E/ViewRootImpl: sendUserActionEvent() mView == null` 当我调用java类并在其中设置BluetoothConnectionService时,就会发生这种情况。具体来说,当调用取消进度对话框的方法时,会发生此错误 `public Conne

抱歉,我知道这个问题已经被问过好几次了。 但我尝试了建议的解决方案,但没有成功

在我的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
 }
您还需要更新主线程上的视图。如果您不在主线程上,那么应该实现处理程序来更新UI组件。有关详细信息,请访问以下链接:

请执行以下操作:

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

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

你好,谢谢你的回答。我添加了getContext检查,它不是null。我无法检查getView,因为该类没有视图。它也没有onCreate函数。该类本质上与此相同。第230行出现等效错误。关于声明处理程序,如果我没有onCreate函数,我应该在哪里声明它?替换这一行:mProgressDialog.disease();使用mProgressDialog.dismise(getContext());在此之后,将{code>@Override public void dismise(){if(Looper.myLooper()==mHandler.getLooper()){dismissDialog();}替换为:@Override public void dismise(上下文上下文){if(Looper.myLooper()==mHandler.getLooper()){if(上下文!=null){dismissDialog();}}其他{mHandler.post(mDismissAction);}如果问题像您所说的那样在这一行,那么这将起作用。否则,您必须进行调试,以获得异常的确切位置。我应该在哪里实现Disclose override方法?我在调试器发现错误时带给我的Dialog.java文件中实现了它:(C:\…\Android\SDK\sources\Android-22\Android\app\Dialog.java)。但它不会影响我的代码(即,在调用dissmiss(getContext())时,它仍然不认为dislose将上下文作为参数)。我还在Android-27 SDK文件(应用程序的CompileSDK版本)上实现了它,但仍然有错误。我应该在其他地方实现它吗?为什么在我的另一个类中没有接受上下文更新的方法?