当前位置: 首页 > 知识库问答 >
问题:

如何为RecyclerView从Firestore (Kotlin)的嵌套地图数组中检索数据

应嘉容
2023-03-14

我想寻求帮助,了解如何从Firestore中检索称为“城市”的嵌套地图数组的数据 到MutableList ,然后我想将其插入到回收器视图中,其中来自“区域”的数据用于标题,数据“城市”用于常规列表项。

区域数据: 可变列表 , 当我按照 Alex Mamo https://medium.com/firebase-tips-tricks/how-to-map-an-array-of-objects-from-cloud-firestore-to-a-list -of-对象-122e579eae10 的过程时,得到了很好,但是数据: 城市: 可变列表 ,根据相同的方法,是空的(无法检索)。

您能建议如何获取“城市”的数据吗?

附言:我在某处读到过迭代“城市”的建议,但我不知道如何迭代,请直接找个例子(最好是在Kontlin)。

代码:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

 …..

regionsRef.get().addOnCompleteListener { document ->
    if (document.isSuccessful()) {
        val documentSnapshot = document.result

        // Retrieve array of maps for „regions“ 
        val regions = documentSnapshot.toObject(RegionDocument::class.java)?.regions

        // Retrieve array of maps for „cities“
        val cities = documentSnapshot.toObject(CityDocument::class.java)?.cities

       …
    }
}

对象城市的数据类别:

data class City(
   val cityNumber: Long? = null,
   val cityName: String? = "" )

data class CityDocument(
    var cities: MutableList<City>? = null) 

火炉结构:

共有1个答案

杜霍英
2023-03-14

为了能够获取与您的文档结构相对应的数据,您需要三个类:

class Document {
    var regions: MutableList<Region>? = null
}

class Region {
    var cities: MutableList<City>? = null
    var regionName: String? = null
    var regionNumber: Long? = null
}

class City {
    var cityName: String? = null
    var cityNumber: Long? = null
}

下面你可以找到阅读所有城市的解决方案:

val db = FirebaseFirestore.getInstance()
val docIdRef = db.collection("collName").document("docId")
docIdRef.get().addOnCompleteListener { task ->
    if (task.isSuccessful) {
        val document = task.result
        if (document != null) {
            val doc = document.toObject(Document::class.java)
            if (doc != null) {
                val regions = doc.regions
                if (regions != null) {
                    for (region in regions) {
                        val cities = region.cities
                        //Do what you need to to do with your List<City>.
                    }
                }
            }
        }
    } else {
        Log.d("TAG", task.exception!!.message!!) //Never ignore potential errors!
    }
}

现在,只需用数据库中的< code>collName和< code>docId替换即可。

 类似资料:
  • 我正在尝试使用Angular检索嵌套Firestore数据库中所有用户的数据。数据库看起来如下所示:用户(id)->posts(id)-{description:这是一个图像,image:imageURL}。

  • 我想在Android中使用列表视图显示用户的家庭数据。这是我的GSON: 这是我的FamilyAdapters.java: 这是我的家人。java: 这个是ApiClient.java: 这个是我的ListKeluarga.java活动,将显示家庭列表: 这是我的MainInterface.java: 我已经尝试为Family.java.中的每个变量使用字符串,但它仍然显示了这一点: e/recy

  • 我计划将文档中地图字段的子字段的值用于其他目的,但似乎无法检索它。我在这个网站上找到了一个答案,但是得到值的解决方案代码对我来说太多了。我可以使用解决方案代码来获得值,但如果有最简单的方法来获得它,请在这里删除答案。 这是Firestore DB的截图,我需要在一个以UID作为字段名的map字段中获得deleted的布尔值:

  • 我创造了一个这样的形式 如果它没有验证,我将重新显示填充了数据的表单。填充问题数据并不难 但是,我无法从答案模型(具有内容和链接字段)的会话哈希中获取嵌套值。这不起作用。 我觉得是因为hash对象中的0,1,2迭代。例如,这是hash对象的一个片段(完整显示在下面) 但我不知道在构建问题答案时如何表达这一点 当我尝试构建时,在尝试从哈希对象中提取数据时,我不会表示迭代。你能解释一下我如何修改这一行

  • 问题内容: 我正在努力从格式如下的JSON文件中检索一些值: 我尝试了不同的方法(json,gson,jayway- JsonPath),但是我无法从“属性”数组中获取值,只能从第一个数组中获取值。我不知道如何指定“属性”是一个JSONArray而不是一个JSONObject或如何为其设置正确的路径。这是我正在玩的最后一个代码,当它找到一个数组时停止: 我想做的就是获得卢卡斯或布兰登的价值。任何帮