使用 Kotlin 从 Firebase 数据库和填充对象 Class 中检索数据
Retrieve data with child from Firebase Database and Populate Object Class using Kotlin
如何从 Firebase 数据库中检索带有 child* 的数据并填充用户对象 class。
Firebase 示例:
- 用户
- uid : 131232
- 名字:约翰
- 姓氏:Doe
- 位置
- 纬度*:15.2512312
- 经* : -12.1512321
- 聊天
- -k1231* : 真
- -k1285* : 真
并且在检索到可以使用的数据后即:User.firstName 或 User.location.lat 等.
提前致谢。
最好的办法是创建多个自定义 类:
class User {
public String firstName;
public String lastName;
public UserLocation location;
}
...
class UserLocation {
public double lat;
public double lon;
}
然后你可以将整个东西反序列化为User
。
正如 Sam Stern 在他的回答中提到的,最好分别为每个 class 创建一个表示。我会用 Kotlin 写给你相应的 classes。
这是User
class:
class User (
val firstName: String = "",
val lastName: String = "",
val userLocation: UserLocation? = null
)
这是 UserLocation
class:
class UserLocation (
val lat: Int = 0,
val lng: Int = 0
)
to query this User 1332 and cast it to the User.class object
请使用以下代码行:
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
.
如何从 Firebase 数据库中检索带有 child* 的数据并填充用户对象 class。
Firebase 示例:
- 用户
- uid : 131232
- 名字:约翰
- 姓氏:Doe
- 位置
- 纬度*:15.2512312
- 经* : -12.1512321
- 聊天
- -k1231* : 真
- -k1285* : 真
- uid : 131232
并且在检索到可以使用的数据后即:User.firstName 或 User.location.lat 等.
提前致谢。
最好的办法是创建多个自定义 类:
class User {
public String firstName;
public String lastName;
public UserLocation location;
}
...
class UserLocation {
public double lat;
public double lon;
}
然后你可以将整个东西反序列化为User
。
正如 Sam Stern 在他的回答中提到的,最好分别为每个 class 创建一个表示。我会用 Kotlin 写给你相应的 classes。
这是User
class:
class User (
val firstName: String = "",
val lastName: String = "",
val userLocation: UserLocation? = null
)
这是 UserLocation
class:
class UserLocation (
val lat: Int = 0,
val lng: Int = 0
)
to query this User 1332 and cast it to the User.class object
请使用以下代码行:
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
.