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

21

环境: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);

    }

在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)

有什么想法是出了问题吗?


1
我自从使用Android Studio 3.1.1以来也遇到了同样的问题,但是请查看https://dev59.com/klUL5IYBdhLWcg3w1a6n#49766078 - JR Tan
在错误发生时,你是否正在使用高级分析工具? - gusgol
你是在调试代码吗? - gusgol
给gusgol:我在Firebase>身份验证>用户中删除了我的帐户,并尝试使用相同的电子邮件再次注册。 - Jack Wilson
7个回答

21

看起来这是Android Profiler的问题。

因为在API >= 26的情况下,我们不需要显式地启用高级分析,当您在Android Studio中打开“Android Profiler”选项卡时,它会捕获您的应用程序并绑定到它。

对我有帮助的是,进入“Android Profiler”选项卡,然后点击右上角的“End Session”。

查看截图


1
这完全是我的问题。谢谢您的发布。尝试追踪真的很令人沮丧。 - tronious
1
我本来猜不到这个。很好的发现,对我有用!! - Neil B
1
这正是我所遇到的问题。在一天开始时启动了 Profiler,然后就忘记了它。结束会话肯定有帮助,感谢建议! - Alexandr Zhurkov

20

这件事情发生在我的真实设备上。

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

在提交文本后调用EditText.clearFocus() 可以解决问题,因为InputConnection.closeConnection会立即被调用,而不是在另一个Fragment的onCreateView中。

在Fragment/Activity的onPause中调用clearFocus() 也可以解决该问题。


2

最终,我通过在模拟器上卸载该应用程序,

然后再次运行和安装该应用程序来解决问题。

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


我在真实设备上仍然遇到这个问题。没有任何帮助 :( - Artur Latoszewski

1
我遇到了一个非常相似的问题,@Sfseyhan建议在onPause()中调用clearFocus()并没有解决问题(清除我的View.OnFocusChangeListener也没有)。当软键盘显示并聚焦于EditText时,我经常会收到两个异常之一:
  • 如果正在编辑,但是启动了新的Activity: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.inputmethod.InputConnection.finishComposingText()' on a null object reference

  • 如果正在编辑,但是按下Home按钮返回到启动器: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.inputmethod.InputConnection.reportFullscreenMode(boolean)' on a null object reference

看起来实际问题出在Android Studio上(https://issuetracker.google.com/issues/77764953)。我使用的是v3.1.3,但正如问题注释所述,他们在Android Studio 3.2 Canary 18中进行了修复。我已经验证过,在我的端上使用Android Studio 3.2 Beta 2,我不再遇到崩溃。


1
为什么在Android Studio中进行修复就能消除应用程序中的崩溃?我甚至没有在调试模式下启动应用程序。 - WindRider
我在模拟器和我的设备上都遇到了这个问题(在使用Android Studio进行调试时)。不错的发现! - hellaandrew

1
我认为这个问题与模拟环境有关。在模拟器中,我遇到了类似的问题,但在我的手机上却没有出现。
如果我在模拟器中使用鼠标,在切换片段时会崩溃,但如果只使用键盘,则不会崩溃。
解决方案: 我更新了模拟器,问题就消失了。

0
观察到这个问题出现在移除当前片段并显示不同片段时。
尝试了不同的方法后:只有在设备处于调试模式下连接时才会出现这个问题。
NPE:试图调用接口方法'void android.view.inputmethod.InputConnection.closeConnection()',对象引用为空 ->关闭与EditText的连接时崩溃(通过不同的观察得出此结论)
解决方案:无 - 在设备正常情况下工作正常(没有调试模式) 其他解决方案:更新Android Studio到最新版本
或者
进入编辑配置设置 -> 分析 -> 启用高级分析

0

我尝试了这个线程中的所有解决方案,但问题并没有得到解决。

后来我遇到了这篇博客文章。正如博客文章所建议的那样,我将构建变体从调试改为发布,并解决了问题。

在安装发布版本之前,您应该完全删除设备上的调试应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接