Получение данных из Firebase (базы данных в реальном времени) в список (Kotlin) - PullRequest
1 голос
/ 30 сентября 2019

Структура RealtimeDatabase в 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
            }
      }
}

1 Ответ

0 голосов
/ 30 сентября 2019

Значения вашего конструктора не совпадают с именами значений вашей базы данных

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)

он будет искать имена этих полей по ссылке, и если он не может быть достигнут, вы не сможете получить эти значения

...