关闭ProgressDialog时出错-E / ViewRootImpl:sendUserActionEvent()mView == null

时间:2019-01-25 22:25:42

标签: java android android-studio bluetooth

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

在我的Android应用中,我开始无处不在地随机出现此错误,我没有修改代码,它运行了好几次,现在它向我显示此错误:

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

logcat

当我在建立BluetoothConnectionService的java类中调用时会发生这种情况。具体来说,它是在调用关闭“进度对话框”的方法时发生的。

`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"`

请,任何建议都将对我有所帮助,因为我在该应用程序开始运行之前就已经完成了该应用程序,我不知道为什么!

1 个答案:

答案 0 :(得分:1)

您需要检查上下文是否为空。当您指向的上下文或视图为空时,通常会发生这种情况。只需在调用之前尝试执行以下检查即可:

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

还需要更新主线程上的视图。如果不在主线程上,则应实现处理程序以更新UI组件。请访问以下链接以获取详细信息:

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
                }
            });