【问题标题】:Loop through array to get field values of a document in firestore using android/kotlin使用 android/kotlin 遍历数组以获取 firestore 中文档的字段值
【发布时间】:2019-02-23 08:01:22
【问题描述】:

我希望能够访问我的集合的字段值,但我无法在 for 循环中执行此操作。

我附上了我尝试过的代码和下面的截图。

在下面的代码中 str 是文档中的名称(例如:sgjj,如正在获取的屏幕截图中)

firestore 数据库截图:

enter image description here

我试过的代码:

class HostActivityScreen : AppCompatActivity(),HostAdapter.OnItemCheckListener {
    var currentSelected:ArrayList<String> = ArrayList()
    override fun onItemCheck(item: String) {

        currentSelected.add(item)

    }

    override fun onItemUncheck(item: String) {

        currentSelected.remove(item)

    }
    
  for(str in currentSelected){
    print(str)
    var id: String = ""
    var gamingname:String=""
                mFirestore.collection("AllUsers").document(str).get().addOnCompleteListener(OnCompleteListener<DocumentSnapshot> { task ->
      if (task.isSuccessful) {
          val docs:DocumentSnapshot= task.result!!
          print(docs.getData())
          if(docs!=null){
                    id =task.result!!.data!!.get("gaminguserid").toString()
                   gamingname = task.result!!.data!!.get("gaminname").toString();
                        }

                              }
    })
  }

}

它显示的错误是:

kotlin.KotlinNullPointerException
    at HostActivityScreen$onCreate$1$5.onSuccess(HostActivityScreen.kt:120)
    at HostActivityScreen$onCreate$1$5.onSuccess(HostActivityScreen.kt:31)
    at com.google.android.gms.tasks.zzn.run(Unknown Source)

第 120 行是:

id= documentSnapshot.getString("gaminguserid")!!

第 31 行是:

class HostActivityScreen : AppCompatActivity(),HostAdapter.OnItemCheckListener {

我的调试屏幕截图(不进入 addonsucesslistener):

enter image description here

以上代码都不起作用,我可以看到 str 值已获得,但它没有进入 addonsuccesslistener 或 addoncompletelistener 循环。为什么会发生这种情况。我如何访问字段值?

【问题讨论】:

  • 究竟是什么不起作用?有错误吗?观察到的行为?
  • 这段代码有什么问题?也请回复@。
  • @AlexMamo 我已经用错误/调试屏幕截图更新了我上面的代码
  • @DougStevenson 我已经用错误/调试屏幕截图更新了我上面的代码。
  • 尽量避免循环并手动给出文档名称进行调试

标签: android firebase kotlin google-cloud-firestore


【解决方案1】:

下面的代码适合我:

mFirestore.collection("AllUsers").document(str).get().addOnSuccessListener(OnSuccessListener<DocumentSnapshot> {documentSnapshot->
  var id: String = ""
  var gamingname:String=""
  if(documentSnapshot.exists()){
        id= documentSnapshot.getString("gaminguserid")!!                                  
        gamingname=documentSnapshot.getString("gaminname")!!
   }else
   {                                      
        Toast.makeText(this@HostActivityScreen,"Document does not exist", 
        Toast.LENGTH_LONG).show()
   }
                               
}).addOnFailureListener(OnFailureListener { e->
val error=e.message                             
Toast.makeText(this@HostActivityScreen,"Error:"+error, Toast.LENGTH_LONG).show()
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2021-06-29
    • 1970-01-01
    相关资源
    最近更新 更多