firebase - 从Firebase数据库中检索带有子级的数据,并使用Kotlin填充对象类

标签 firebase firebase-realtime-database kotlin data-retrieval auto-populate

如何从Firebase数据库中使用child *检索数据并填充User对象类。

Firebase示例:

  • 用户
  • uid:131232
  • 名字:John
  • lastName:Doe
  • 位置
  • lat *:15.2512312
  • lon *:-12.1512321
  • 聊天
  • -k1231 *:真
  • -k1285 *:真

  • 并在检索到可以使用的数据后,即: User.firstName User.location.lat 等。

    先感谢您。

    最佳答案

    正如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
    )
    

    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

    关于firebase - 从Firebase数据库中检索带有子级的数据,并使用Kotlin填充对象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53146092/

    相关文章:

    javascript - 使用 Javascript 从 Firebase 检索数据时出错

    firebase - firebase云功能是否涉及实时数据库和firestore的成本?

    Swift 4、Firebase如何观察快照并转换成对象

    java - 在应用程序中间安装 apk - Android Studio

    arrays - 移动 Firebase 数组中的项目

    javascript - 使用 JavaScript 从 Firebase 下载为 JSON

    c# - 将 RootNode 复制到 JSON 中的 ChildNode

    swift - Swift 3 中的 Firebase 数据库设置和数据处理

    Kotlin - 如何运行 n 个协程并等待前 m 个结果或超时?

    generics - 处理惯用函数链中的空列表