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

Kotlin检测Google账号登录状态时GoogleSignIn.getLastSignedInAccount报空指针异常

问题根因

你遇到的空指针异常本质是GoogleSignIn.getLastSignedInAccount()方法传入的this指向的对象不是有效、已初始化的Context实例,方法内部调用getApplicationContext()时触发空引用。

常见场景与解决方案

  • 场景1:方法定义在非Context子类(如ViewModel、普通工具类)中
    此时this没有Context属性,需要将Context作为参数传入,优先使用ApplicationContext避免内存泄漏,代码修改参考:

    fun isSignedIn(context: Context): Boolean {
        println(FirebaseAuth.getInstance().currentUser)
        val signInAccount = GoogleSignIn.getLastSignedInAccount(context.applicationContext)
        println(signInAccount)
        return signInAccount != null
    }
    
  • 场景2:方法定义在Fragment中
    若调用时机早于Fragment关联到Activity、或Fragment已解绑,此时Context为空,需要先判断Fragment挂载状态再调用:

    fun isSignedIn(): Boolean {
        // 先判断Fragment是否已挂载到Activity
        if (!isAdded) return false
        println(FirebaseAuth.getInstance().currentUser)
        val signInAccount = GoogleSignIn.getLastSignedInAccount(requireContext().applicationContext)
        println(signInAccount)
        return signInAccount != null
    }
    
  • 场景3:方法定义在Activity中
    检查方法调用时机是否早于Activity的onCreate生命周期(如类成员属性初始化时直接调用),此时Activity尚未完成初始化,Context为空,将调用逻辑移到onCreate及之后的生命周期阶段即可。

补充优化方案

由于你已经集成了Firebase Auth,Google账号登录成功后Firebase会同步登录状态,可直接通过Firebase当前用户判断登录状态,不需要额外调用GoogleSignIn相关接口,代码更简洁也避免了Context传参问题:

fun isSignedIn(): Boolean = FirebaseAuth.getInstance().currentUser != null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:24:03