尝试在空对象引用上调用接口方法'void android.view.inputmethod.InputConnection.closeConnection()'

Mik*_*Lin 19 android

环境:Android Studio 3.1.1代码:

import com.firebase.ui.auth.AuthUI;
...
    private void startSignIn()
    {
        // Sign in with FirebaseUI
        Intent intent = AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setIsSmartLockEnabled(false)
                .setAvailableProviders(Arrays.asList(
                        new AuthUI.IdpConfig.EmailBuilder().build(),
                        new AuthUI.IdpConfig.GoogleBuilder().build()
                ))
                .build();

        startActivityForResult(intent, RC_SIGN_IN);
        mViewModel.setIsSigningIn(true);

    }
Run Code Online (Sandbox Code Playgroud)

当我在firebase> Authentication> USERS中删除我的帐户并尝试再次使用相同的电子邮件注册时,会出现该错误.

当我选择使用电子邮件登录并输入电子邮件并按"下一步"时,应用程序已停止...

它应该是一个新帐户

错误代码:

java.lang.NullPointerException: Attempt to invoke interface method 'void android.view.inputmethod.InputConnection.closeConnection()' on a null object reference
        at android.view.inputmethod.InputConnectionWrapper.closeConnection(InputConnectionWrapper.java:270)
        at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:541)
        at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Run Code Online (Sandbox Code Playgroud)

什么出了什么问题?

Nik*_*aev 20

这似乎是Android Profiler的问题.

因为我们不需要为API> = 26显式启用高级分析,所以在Android Studio中打开"Android Profiler"选项卡后,它会捕获您的应用并绑定它.

帮助我的是,进入"Android Profiler"标签,然后点击右上角的"结束会话".

查看截图


Sfs*_*han 18

这是在真实设备上发生的.

我有一个EditText,我在用户提交文本后以编程方式清除并隐藏软键盘.当用户切换到另一个Fragment时,尝试关闭InputConnection但很少它为null.

提交文本后调用EditText.clearFocus()修复了我的问题,因为InputConnection.closeConnection立即调用,而不是另一个Fragment的onCreateView.

使用EditText在片段/活动的onPause上调用clearFocus也应该有效.


Mik*_*Lin 2

最后,我通过卸载模拟器上的应用程序解决了问题,

并再次运行并安装该应用程序。

看来这个问题是由缓存引起的,我不确定