You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除Firebase账号后触发空对象引用:调用InputConnection.closeConnection()失败

嘿,我之前在使用FirebaseUI Auth的时候也碰到过一模一样的问题,结合你描述的场景——删除Firebase账号后出现这个空指针报错,咱们来一步步理清楚原因和解决办法:

报错原因分析

这个Attempt to invoke interface method 'void android.view.inputmethod.InputConnection.closeConnection()' on a null object reference空指针异常,本质是FirebaseUI的登录流程和本地残留的无效Auth会话冲突导致的:
当你在Firebase后台删除账号后,本地App的Auth状态没有及时同步,此时启动SignIn界面时,输入组件(邮箱/密码输入框)会尝试和关联的输入服务建立连接,但因为本地会话已经失效,对应的InputConnection实例变成了null,后续清理操作就触发了空指针。

解决办法

我整理了几个亲测有效的方案,你可以根据自己的情况选择:

  • 提前校验Auth状态,清理无效会话
    在调用startSignIn()之前,先检查当前用户的有效性,避免启动无效的登录流程:

    // 先添加Auth状态监听,同步后台账号状态
    FirebaseAuth auth = FirebaseAuth.getInstance();
    auth.addAuthStateListener(firebaseAuth -> {
        FirebaseUser currentUser = firebaseAuth.getCurrentUser();
        if (currentUser != null) {
            // 通过获取ID令牌验证用户是否还存在于后台
            currentUser.getIdToken(true)
                .addOnCompleteListener(task -> {
                    if (!task.isSuccessful()) {
                        // 令牌获取失败,说明账号已被删除,强制退出登录
                        auth.signOut();
                    }
                });
        }
    });
    

    这样能确保启动登录界面时,本地没有残留的无效用户会话,从根源避免输入组件绑定无效连接。

  • 完善登录结果的错误处理
    在onActivityResult中专门处理账号不存在的错误,及时清理界面状态:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RC_SIGN_IN) {
            IdpResponse response = IdpResponse.fromResultIntent(data);
            mViewModel.setIsSigningIn(false);
            
            if (resultCode != RESULT_OK) {
                if (response != null && response.getError() != null) {
                    // 捕获账号不存在的错误
                    if (response.getError().getErrorCode() == ErrorCodes.ERROR_USER_NOT_FOUND) {
                        FirebaseAuth.getInstance().signOut();
                        // 这里可以给用户弹出提示:"该账号已被删除,请重新注册"
                    }
                }
            }
        }
    }
    
  • 升级FirebaseUI Auth版本
    你当前使用的Android Studio 3.1.1对应的FirebaseUI版本可能比较老旧,旧版本在处理账号删除后的状态同步上存在bug。建议升级到适配你AS版本的较新FirebaseUI Auth版本(比如4.3.1,这个版本兼容AS 3.x),新版本修复了不少这类空指针问题。在你的build.gradle(Module level)中更新依赖:

    implementation 'com.firebaseui:firebase-ui-auth:4.3.1'
    

内容的提问来源于stack exchange,提问作者Jack Wilson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:34:15