AndroidKotlin:我如何从Firebase Firestore显示字段上的数据库

x7yiwoj4  于 2023-04-21  发布在  Kotlin
关注(0)|答案(1)|浏览(101)

在事件列表中,我希望根据创建事件的人检索事件数据,这意味着每个人都可以根据字段检索自己创建的事件,因为当事件创建时,将有一个字段记录事件是由谁创建的..但在我的情况下,回收器视图显示所有事件,而不是根据“createdBy”进行过滤
这是我的消防站

db.collection("event").addSnapshotListener(object : EventListener<QuerySnapshot>{
    override fun onEvent(value: QuerySnapshot?, error: FirebaseFirestoreException?) {
        if(error != null){
            Log.e("Firestore Error", error.message.toString())
            return
        }
        db.collection("event").whereEqualTo("createdBy", ".com").get()
            .addOnSuccessListener { documents ->

                for (document in documents) {
                    evArrayList.clear() // Clear the list before adding new items
                    val name = document.getString("createdBy")
                    Log.d("forloop1", "Retrieved document with createdBy=$name")

                    for(dc : DocumentChange in value?.documentChanges!!){
                            Log.d("forloop2", "Added event to evArrayList")
                            if (dc.type == DocumentChange.Type.ADDED) {
                                    evArrayList.add(dc.document.toObject(Event::class.java))
                            }
                    }
                    evAdapter.notifyDataSetChanged()
                }
                Toast.makeText(context,"thadfsa",Toast.LENGTH_SHORT).show()
            }
            .addOnFailureListener { exception ->
                // Handle any errors
            }
        }
    })
}
qhhrdooz

qhhrdooz1#

你在代码中从数据库阅读数据两次,第一次是:

db.collection("event").addSnapshotListener(object : EventListener<QuerySnapshot>{
   override fun onEvent(value: QuerySnapshot?, error: FirebaseFirestoreException?) {

这将侦听整个集合,因此获取所有event文档。
接下来是:

db.collection("event").whereEqualTo("createdBy", ".com").get()
    .addOnSuccessListener { documents ->

这只从特定用户获取event文档。
但是在处理结果时,你会循环:

for(dc : DocumentChange in value?.documentChanges!!){

这个循环中的value引用了firstread操作的结果,该操作读取了所有event文档。
如果你只想显示查询结果,你应该运行一个 * 查询**并处理这些结果:

// 👇
db.collection("event").whereEqualTo("createdBy", ".com").addSnapshotListener(object : EventListener<QuerySnapshot>{
    override fun onEvent(value: QuerySnapshot?, error: FirebaseFirestoreException?) {
        if(error != null){
            Log.e("Firestore Error", error.message.toString())
            return
        }

        evArrayList.clear() // Clear the list before adding new items

        for(dc : DocumentChange in value?.documentChanges!!){
            Log.d("forloop2", "Added event to evArrayList")
            if (dc.type == DocumentChange.Type.ADDED) {
                evArrayList.add(dc.document.toObject(Event::class.java))
            }
        }

        evAdapter.notifyDataSetChanged()
    })
}

相关问题