Получить данные с дочерним элементом из базы данных Firebase и заполнить класс объектов, используя Kotlin
Как я могу получить данные с child * из базы данных Firebase и заполнить класс объекта User.
Пример Firebase:
- пользователи
- UID: 131232
- Имя: Джон
- lastName: Доу
- место нахождения
- широта *: 15.2512312
- lon *: -12.1512321
- чатов
- -k1231*: правда
- -k1285*: правда
- UID: 131232
и после получения данных, которые можно использовать, т. е.: 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
,