Получить данные с дочерним элементом из базы данных Firebase и заполнить класс объектов, используя Kotlin

Как я могу получить данные с child * из базы данных Firebase и заполнить класс объекта User.

Пример Firebase:

  • пользователи
    • UID: 131232
      • Имя: Джон
      • lastName: Доу
      • место нахождения
        • широта *: 15.2512312
        • lon *: -12.1512321
      • чатов
        • -k1231*: правда
        • -k1285*: правда

и после получения данных, которые можно использовать, т. е.: User.firstName или User.location.lat и т. д.

Заранее спасибо.

2 ответа

Решение

Как упомянул Сэм Стерн в своем ответе, лучше создать представление для каждого класса отдельно. Я напишу вам соответствующие классы в Котлине.

Это User учебный класс:

class User (
    val firstName: String = "",
    val lastName: String = "",
    val userLocation: UserLocation? = null
)

И это UserLocation учебный класс:

class UserLocation (
        val lat: Int = 0,
        val lng: Int = 0
)

запросить этого пользователя 1332 и привести его к объекту User.class

Пожалуйста, используйте следующие строки кода:

val uid = FirebaseAuth.getInstance().currentUser!!.uid
val rootRef = FirebaseDatabase.getInstance().reference
val uidRef = rootRef.child("users").child(uid)
val valueEventListener = object : ValueEventListener {
    override fun onDataChange(dataSnapshot: DataSnapshot) {
        val user = dataSnapshot.getValue(User::class.java)
        Log.d(TAG, "Lat/Lng: " + user!!.userLocation!!.lat + ", " + user.userLocation!!.lng);
    }

    override fun onCancelled(databaseError: DatabaseError) {
        Log.d(TAG, databaseError.message) //Don't ignore errors!
    }
}
uidRef.addListenerForSingleValueEvent(valueEventListener)

В котором uid должен содержать значение как 131232, Вывод в вашем logcat будет:

Lat/Lng: 15.2512312, -12.1512321

Таким же образом вы можете получить: user!!.firstName а также user!!.lastName,

Лучше всего создать несколько пользовательских классов:

class User {
  public String firstName;
  public String lastName;
  public UserLocation location;
}

...

class UserLocation {
   public double lat;
   public double lon;
}

Тогда вы можете десериализовать все это User,

Другие вопросы по тегам