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

Android 如何根据Firestore中的特定字段从集合中获取所有文档,android,firebase,kotlin,google-cloud-firestore,Android,Firebase,Kotlin,Google Cloud Firestore,我在“Firestore”中有这些数据,我想按照“城市”获取所有文档,就像所有拥有城市“卡拉奇”的用户一样,并存储在类型为“chatModel”的arrayList中。我想在recyclerView中显示这些数据 下面是Database的图像: 我已经试过了,但它只能给我收集的最后一份文档。 firestore.collection("USERS") .whereEqualTo("city",cityName) .get() .add

我在“Firestore”中有这些数据,我想按照“城市”获取所有文档,就像所有拥有城市“卡拉奇”的用户一样,并存储在类型为“chatModel”的
arrayList
中。我想在recyclerView中显示这些数据

下面是Database的图像:

我已经试过了,但它只能给我收集的最后一份文档。

      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}
这是包含城市“卡拉奇”的所有文件的截图,但它只得到最后一个

我试过这个,但不起作用

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

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

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

最可能的问题是小写和大写。您的问题可能与此类似

正如我所看到的,您在数据库中描述的城市值是
karachi
in小写,但您提供的输出是大写结果

firestore.collection("USERS").get()
    .addOnSuccessListener { documents ->
        for (document in documents) {
            if(document.get("city").equals("karachi") || document.get("city").equals("Karachi")){
                arrayList.add(document.toObject(chatModel::class.java));
            }
        }

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

实际上,问题是我没有在arrayList中获取数据。我想知道如果您尝试记录
log.d(TAG,document.toObject(chatModel::class.java).city)
,如何检索数据,logcat中打印的是什么?它只从FireStore获取最后一个文档,应该打印每个名称。你们有并没有试过把这些行从循环中去掉?是的,我试过所有这些代码,但这只是给我最后一个文档