从 Firebase(实时数据库)检索数据到列表中(Kotlin)

Retrieving data from Firebase (Realtime Database) into a list (Kotlin)

The RealtimeDatabase structure in Firebase

我想遍历 "mifkada" 中的所有用户并将他们作为 BlogPost 对象添加到列表中:

class BlogPost (
  var namerv: String,
  var gafrv: String,
  var placerv: String,
  var phonerv: String,
  var notesrv: String
) {
  constructor() : this("", "", "", "", "") {}
}

我试着用 for 循环来做,但它并没有像我写的那样工作

class DataSource{

        companion object{

            fun createDataSet(): ArrayList<BlogPost>{


                var databaseMifkada = FirebaseDatabase.getInstance().getReference("mifkada")

                val list = ArrayList<BlogPost>()

                val postListener = object : ValueEventListener {
                    override fun onDataChange(dataSnapshot: DataSnapshot) {
                        if(dataSnapshot!!.exists()){
                            list.clear()
                            for (e in dataSnapshot.children){
                                val post = e.getValue(BlogPost::class.java)
                                list.add(post!!)
                            }
                        }
                    }

                    override fun onCancelled(databaseError: DatabaseError) {
                        // Getting Post failed, log a message
                        Log.w(TAG, "loadPost:onCancelled", databaseError.toException())
                    }
                }

                databaseMifkada.addValueEventListener(postListener)

                return list
            }
      }
}

构造函数的值与数据库值的名称不匹配

class BlogPost (
  var namerv: String,
  var gafrv: String,
  var placerv: String,
  var phonerv: String,
  var notesrv: String
) {
  constructor() : this("", "", "", "", "") {}
}

应该是

class BlogPost (
  var name: String,
  var gaf: String,
  var place: String,
  var phone: String,
  var notes: String
) {
  constructor() : this("", "", "", "", "") {}
}

你需要有相同的名字,因为当你这样做时

val post = e.getValue(BlogPost::class.java)

它会在reference下找那些字段名,如果找不到,就得不到那些值