【问题标题】:Firestore only lets me load one documentFirestore 只允许我加载一个文档
【发布时间】:2018-03-25 16:20:33
【问题描述】:

那么,为什么我可以从 this one 调用任何键值对,但不能从 this one 调用?

这是我的代码

 var firstKitList = mutableListOf<String>()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_kit_list)

    val mainKitList = kitListView
    val mainListViewAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, firstKitList)
    mainKitList.adapter = mainListViewAdapter

     db1.collection("cities").get().addOnSuccessListener { snapshot ->
        for (document in snapshot.documents) {
            val data = document.data
            val country = data["USA"] as String

            firstKitList.add(country)



        }
        mainListViewAdapter.notifyDataSetChanged()
    }

如果我将“城市”切换为“KitList”,将val country = data["USA"] as String 切换为val rope = data["skipping"] as String,它会起作用...有人可以向我解释一下吗?

【问题讨论】:

  • 在您的 Firestore 数据中,我没有看到关键“USA”和“skipping”的数据。您确定这些数据正确吗?
  • 这个答案让我发现了问题所在。谢谢
  • 你能告诉我一件我不知道该怎么做的事情吗:我如何加载整个文档,而不是寻找特定的数据?谢谢
  • 看看下面的答案。

标签: android kotlin google-cloud-firestore


【解决方案1】:

第一个答案: 在您的 Firestore 数据中,我没有看到关键“USA”和“skipping”的数据。您确定这些数据正确吗?

回答第二个问题。 我建议您使用所需的字段创建数据类。然后,您可以使用代码将文档数据映射到您的类:

document.data.toObject(DataClass::class.java)

或者,如果您在 QuerySnapshot 中有多个文档:

val dataList = mutableListOf<DataClass>()
querySnapshot.documents.mapTo(dataList) { it.toObject(DataClass::class.java)}

根据您的代码,您可以这样做:

querySnapshot.documents.mapTo(firstKitList) { it.toObject(DataClass::class.java)}

@Edit1 这是你的数据模型:

class City(var cityId: String,
       var state: String,
       var name: String,
       var country: String) {

    //remember to add empty constructor.
    constructor() : this("", "", "", "")
}

当您点击此项目上的列表时,使用所有这些数据创建一个 Intent,然后开始新的活动。

@Edit2 如果要添加具有特定 id 的文档:

FirebaseFirestore.getInstance().collection("collectionName")
                    .document("documentId, for example LA").set(city)

如果您想将 id 传递给上一个活动,请了解有关 startActivityForResult 方法的知识:)

【讨论】:

  • 关于第一个问题,这是一个愚蠢的错误,已修复。我在调用值而不是键(数据)。至于第二个,也许我解释错了。让我们以集合“城市”为例。我有一个名为“LA”的文件。我怎样才能使它在我的列表上显示“LA”,然后我单击它,它与该文档中的元素一起出现?我知道如何创建一个意图和所有这些,只需要帮助从firestore获取它的部分谢谢:D
  • 将文档 ID(在本例中为 LA)放入文档中。然后你将有 { 'country' : 'USA', 'name' : 'Los Angeles', 'state' : 'CA', 'cityId' : 'LA' }。它将使您能够通过 id 查询项目 :)
  • 写入文件在哪里?抱歉,我对 Android Dev 还很陌生。
  • 在您的文档中,您有 3 个字段,对吗?再放一个,称它为 cityId 并添加 LA 或您想要的另一个 id :)
  • 哦,不,不是这样 :) 我想要的是文档的名称(在这种情况下是 LA,正如您从我的问题上的链接中看到的那样)出现在我的列表中然后当我单击它时,另一个活动会出现文档中的数据。正如我所说,我知道如何创建意图:)
猜你喜欢
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多