使用 Kotlin 从 Firebase 数据库和填充对象 Class 中检索数据

Retrieve data with child from Firebase Database and Populate Object Class using Kotlin

如何从 Firebase 数据库中检索带有 child* 的数据并填充用户对象 class。

Firebase 示例:

并且在检索到可以使用的数据后即:User.firstNameUser.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!!.firstNameuser!!.lastName.