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

Kotlin中如何正确检查Firestore指定文档是否存在

问题原因

你当前的代码仅判断了Firestore文档读取请求的执行状态是否成功,task.isSuccessful仅代表请求本身没有出现网络错误、权限拒绝等异常,和目标文档是否实际存在没有关联。哪怕文档不存在,只要请求成功完成,task.isSuccessful都会返回true,这就是你误判的核心原因。

Kotlin正确实现方式

你需要在请求执行成功的前提下,调用返回的DocumentSnapshot对象的exists()方法判断文档是否真实存在,同时建议补充用户登录状态、请求失败的边界场景处理:

val currentUse = FirebaseAuth.getInstance().currentUser?.uid
// 先判断用户登录状态,uid为空直接处理异常逻辑
if (currentUse.isNullOrEmpty()) {
    Toast.makeText(applicationContext, "用户未登录", Toast.LENGTH_SHORT).show()
    // 可在此处添加跳转到登录页的逻辑
    return
}
private val mFireStore = FirebaseFirestore.getInstance()
val docref = mFireStore.collection("Users").document(currentUse)

docref.get().addOnCompleteListener { task ->
    when {
        task.isSuccessful -> {
            val document = task.result
            // 调用exists方法判断文档实际是否存在
            if (document.exists()) {
                Toast.makeText(applicationContext, "Exists", Toast.LENGTH_SHORT).show()
                startActivity(Intent(applicationContext, MainActivityUser::class.java))
            } else {
                Toast.makeText(applicationContext, "文档不存在", Toast.LENGTH_SHORT).show()
                // 文档不存在的后续处理逻辑
            }
        }
        else -> {
            Toast.makeText(applicationContext, "查询失败:${task.exception?.message}", Toast.LENGTH_SHORT).show()
        }
    }
}
补充说明
  • exists()是Firebase官方提供的专门用于判断文档是否存在的API,比自行判断document.data != null的可靠性更高
  • 上述代码额外处理了用户未登录、请求执行失败的异常场景,可避免空指针、无提示逻辑异常的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:24:04