kotlin Firestore和Firebase的区别是什么?

q3aa0525  于 2023-01-02  发布在  Kotlin
关注(0)|答案(2)|浏览(154)

Firebase.firestoreFirebaseFirestore.getInstance()有什么区别?
当我想要更新db时,哪一个适合于此目的?
以及当我想检查从Firestore提取的结果值时。
如果我记录它,它只打印对象名称,而不打印包含在对象中结果字符串值。

db.collection("users").whereEqualTo("userId", userId?.toInt())
  .get()
  .addOnSuccessListener {
    documents - >
      for (document in documents) {
        Log.d("결과", documents.toString())
      }
  }

如果我打印这个,它抛出如下结果:

网址:google.firebase.firestore.QuerySnapshot@b38fd47b

我想读取此QuerySnapshot的字段和值,如何执行此操作?
共享代码和错误:
var db =消防基地.消防仓库

val stDocRef = db.collection("users").whereEqualTo("userId", userId?.toInt())
        db.runTransaction { transaction ->
            transaction.update(stDocRef,"name", "new name")
            null
        }.addOnSuccessListener {  Log.d("결과", "Transaction success!") }

fhity93d

fhity93d1#

Firebase.firestore和Firebase Firestore.getInstance()之间的区别是什么?
None,都是创建同一个示例,第一个示例是使用Firebase类的扩展属性创建的,第二个示例是使用FirebaseAuth的getInstance()方法创建的,后者也是单例。
如果我记录它,它只打印对象名,而不是包含在对象中的结果字符串值。
这是预期的行为,因为您在documents对象上调用toString()

Log.d("결과", documents.toString())
//                        👆

来自lambda表达式的documents实际上是QuerySnapshot类型的文档,它:
包含查询结果。它可以包含零个或多个DocumentSnapshot对象。
因此,你必须循环通过文档,因为你已经得到的数据根据类型的字段:

.addOnSuccessListener { documents - >
    for (document in documents) {
      Log.d("결과", document.getString("userId"))
      //                        👆
    }
}

但是如果你想运行一个事务,在我看来这没有任何意义,因为你只是阅读数据,那么请检查documentation,或者我从下面的帖子回答:

kgsdhlau

kgsdhlau2#

你试图打印QuerySnapshot对象,因此它给你的是Memory Address of the Object。为了克服这个问题,尝试打印document.data,如下例所示。
根据docs,使用Firebase.firestore初始化db

val db = Firebase.firestore // Access a Cloud Firestore instance from your Activity

请参阅以下链接了解使用Kotlin在firebase中执行CRUD操作:

  1. https://firebase.google.com/docs/database/android/read-and-write
  2. https://firebase.google.com/docs/firestore/query-data/get-data

相关问题