如何从Firebase数据库中检索带有child *的数据并填充User对象类。
Firebase示例:
,并且在检索到可以使用的数据后,即: User.firstName 或 User.location.lat 等。
谢谢。
答案 0 :(得分:1)
您最好的选择是创建多个自定义类:
class User {
public String firstName;
public String lastName;
public UserLocation location;
}
...
class UserLocation {
public double lat;
public double lon;
}
然后,您可以将整个序列反序列化为User
。
答案 1 :(得分:1)
正如萨姆·斯特恩(Sam Stern)在回答中提到的那样,最好为每个类分别创建一个表示形式。我将在Kotlin中为您编写相应的类。
这是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
。