#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)