Как я могу получить данные из firebase в модель данных?

#android #firebase #kotlin #firebase-realtime-database

#Android #firebase #kotlin #firebase-база данных в реальном времени

Вопрос:

Я совсем новичок в Kotlin. У меня есть класс данных, который содержит URL-адреса изображений с именем TestModel. Мне нужно добавить данные в модель из firebase с помощью этого кода:

Вот моя модель данных: class testModel(val imageLinks: List<String>)

 private val dbRef = FirebaseDatabase.getInstance().reference.child("categories").child("1").child("top")


fun readDataFromFirebase(){

    dbRef.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            var list = ArrayList<testModel>()
            for (e in dataSnapshot.children){
                println(e.value)
            }

        }

        override fun onCancelled(databaseError: DatabaseError) {
            Log.e("DB", "loadPost:onCancelled", databaseError.toException())
        }
    })



}
  

На самом деле этот блок может получать значение из firebase, я вижу в консоли запуска URL-адреса своих изображений, но я не могу добавить их в свою тестовую модель. Как я могу это сделать? Также мне нужны хорошие учебные пособия для таких работ, как модели данных, чтение и запись данных с помощью Kotlin. Я жду вашего совета.

PS: Я уже пробовал getValue метод, но выдает ошибку java.lang.

Комментарии:

1. Не могли бы вы показать класс данных? И в чем именно здесь проблема? Если вы хотите преобразовать свой снимок в свой класс данных, просто snapshot.toObject(YourDataClass::class) укажите, что ваш класс данных должен соответствовать полям моментального снимка, и все они должны иметь значения по умолчанию

2. На самом деле TestModel — это мой класс данных. Я хочу сохранить снимок в TestModel. Я попробую это, но в моей тестовой модели у меня есть список строк, но у меня есть URL-адреса в строковом типе, так что тип списка неправильный? Должна ли это быть только строка?

Ответ №1:

В вашем классе данных измените List<String> на ArrayList<String> , потому что тип List<E> не существует в firebase, но есть массивы.

Сохраните ваши данные как Array<String> в firebase, а затем, когда вы получите свой снимок, выполните snapshot.toObject(TestModel::class)