【问题标题】:db.collection().document().get() never returns nulldb.collection().document().get() 从不返回 null
【发布时间】:2019-06-01 21:09:06
【问题描述】:

MainActivity.kt

val db = FirebaseFirestore.getInstance()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val user = db.collection("zzz").document("ttt")
    user.get()
        .addOnSuccessListener { document ->
            if (document != null) {
                Log.d(TAG, "DocumentSnapshot: ${document}")
            }
        }

我的Log 打印出DocumentSnapshot: DocumentSnapshot{key=zzz/ttt, metadata=SnapshotMetadata{hasPendingWrites=false, isFromCache=false}, doc=null}

无论collection() 值或document() 值是什么,我都设置了user - 它永远不会返回null

这是为什么?

PS:该文档也没有出现在我的 Firebase 控制台中。

【问题讨论】:

    标签: android firebase kotlin google-cloud-firestore


    【解决方案1】:

    你应该改用exists()

    if (document.exists()) {
                    Log.d(TAG, "DocumentSnapshot: ${document}")
                }
    
    

    来自docs

    public boolean exists()

    返回 如果文档存在于此快照中,则为 true

    【讨论】:

    • 谢谢你这个作品。很想知道在什么情况下get() 会返回null?我按照文档(Kotlin - Android):firebase.google.com/docs/firestore/query-data/… 查找文档是否存在的方式,所以我认为这可行。看起来这些文档应该替换为您的 document.exists() 方法。
    • 解释一下,你得到的日志是类DocumentSnapshot的一个实例,你可以在这里看到github.com/firebase/firebase-android-sdk/blob/master/…构造函数包含你得到的字段
    • 所以对象不为空,但字段doc为空,如果您检查源代码github.com/firebase/firebase-android-sdk/blob/master/…中的方法exists,您可以看到他们正在检查实例变量是否doc 是否为空
    • 另外是的,我不确定为什么在 android-kotlin 中他们使用!=null 可能是一个错误,标记@FrankvanPuffelen 也许他知道
    猜你喜欢
    • 2014-11-09
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多