如何根据Firestore中的特定字段从集合中获取所有文档

时间:2020-02-25 12:42:49

标签: android firebase kotlin google-cloud-firestore

我在“ Firestore”中拥有此数据,我想像所有拥有“卡拉奇”城市并存储在“ {chatModel”类型的arrayList中的用户一样,根据“城市”获取所有文档,我想显示此信息recyclerView中的数据

这是数据库的图像:
Here is the image of dataabase

我已经尝试过了,但这只是从收藏集中获取了最后一个文档。

      firestore.collection("USERS")
        .whereEqualTo("city",cityName)
        .get()
        .addOnSuccessListener { documents ->
            for (document in documents) {

                arrayList.add(document.toObject(chatModel::class.java))

                Log.i("Info", "${document.id} => ${document.data}")


            }

            val adapter = chatAdapter(context!!, arrayList)
            chatRecyclerView.layoutManager = LinearLayoutManager(context,
                LinearLayoutManager.VERTICAL,false)
            chatRecyclerView.adapter = adapter
            adapter.notifyDataSetChanged()
        }

这是Logcat结果:

v21GH5sBi3SdIb3v3xsp3ob64S23 => {username=Muhammad Rizwan, Email=mr1017753@gmail.com, city=Karachi, ProfileImageUrl=https://firebasestorage.googleapis.com/v0/b/me2wee-1b547.appspot.com/o/USERS-MEDIA%2Fv21GH5sBi3SdIb3v3xsp3ob64S23?alt=media&token=193c4013-c580-45dc-b63d-fee1ef13caba}

这是包含“ Karachi”城市的所有文档的屏幕截图,但仅显示最后一个

enter image description here

2 个答案:

答案 0 :(得分:0)

我已经尝试过了,但是没有用

它不起作用,因为您在每次for循环迭代时都创建一个chatAdapter对象。要解决此问题,请将代码的最后四行移动到循环之外。循环内部应仅存在:

arrayList.add(document.toObject(chatModel::class.java))

通过这种方式,您可以填充列表并仅在列表中充满对象时设置适配器。

答案 1 :(得分:0)

小写大写的可能性最大。您的问题可能与此question

类似

正如我所见,您在数据库城市中描述的值是小写,是k3sup join,但输出是您提供的大写结果。

karachi