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

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

Пример Firebase:

  • Пользователи
    • UID: 131232
      • Имя: Джон
      • lastName: Doe
      • место
        • лат *: 15,2512312
        • lon *: -12.1512321
      • чаты
        • -k1231 *: правда
        • -k1285 *: правда

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

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

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

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

Это класс 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.

0 голосов
/ 05 ноября 2018

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

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

...

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

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

...