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
相关产品推荐
相关产品推荐

