【问题标题】:Can't get data from dataSnapShot in Android无法从 Android 中的 dataSnapShot 获取数据
【发布时间】:2019-04-23 11:04:37
【问题描述】:

我已经检查了如何从dataSnapShot 获取数据的这些和其他问题,所以请先阅读问题。

下面是我的 Firebase 数据库结构,我在其中执行所有这些操作。

我已经实现了以下代码来从 Firebase 获取/读取数据。 问题是无法通过使用该键或直接传递该键来获取价值。当我得到密钥时,它可能会被打印出来,但它不能使用价值。

mDatabase!!.reference.child(FirebaseKey.NodeEmpCheckInOut) //-->EmpCheckInOut
            .child(AppConstant.yyyy_MM.format(Date()))     //-->2019-04
            .child(userSession!!.getUserId())              //-->N8OE2CGu8nav0k0n7Rh61tKjvRF3
            .addValueEventListener(object : ValueEventListener {
                override fun onCancelled(dataSnapshotError: DatabaseError) {
                    Log.e(TAG, "Error:Exception->" + dataSnapshotError.message)
                }

                override fun onDataChange(dataSnapShot: DataSnapshot) {
                    Log.i(TAG, "complete Data SnapShot::->$dataSnapShot")

                    for (dsnpNode: DataSnapshot in dataSnapShot.children) {
                        val key: String = dsnpNode.key.toString()
                        val value: Any? = dsnpNode.child(key).child("checkIn").getValue().toString()

                        //I have tried these ways also to retry data
                        //val value: String = dsnpNode.child(key).child("checkIn").value.toString()
                        //val value: String = dsnpNode.child("2019-04-11").child("checkIn").value.toString()

                        Logg.i(TAG, "key->$key")
                        Logg.i(TAG, "value::-> $value")

                        /*Log value is printed in log window
                          key->2019-04-11
                          value::-> null*/
                    }
                }

            })

当我打印 dataSnapShot.toString() 时,其打印如下 日志窗口。

{ key = N8OE2CGu8nav0k0n7Rh61tKjvRF3, value = {2019-04-17={todayDate=2019-04-17, checkIn=05:41 AM, isCheckIn=2, checkOut=05:44 PM}, 2019-04-23={todayDate=2019-04-23, checkIn=03:29 PM, isCheckIn=1, checkOut=00}, 2019-04-12={todayDate=2019-04-12, checkIn=09:35 AM, isCheckIn=2, checkOut=10:00 PM}, 2019-04-16={todayDate=2019-04-16, checkIn=05:39 AM, isCheckIn=2, checkOut=05:39 PM}, 2019-04-18={todayDate=2019-04-18, checkIn=05:55 PM, isCheckIn=2, checkOut=08:13 PM}, 2019-04-13={todayDate=2019-04-13, checkIn=09:36 AM, isCheckIn=2, checkOut=5:00 PM}, 2019-04-19={todayDate=2019-04-19, checkIn=10:48 AM, isCheckIn=1, checkOut=00}, 2019-04-11={todayDate=2019-04-11, checkIn=05:35 AM, isCheckIn=2, checkOut=08:00 PM}, 2019-04-22={todayDate=2019-04-22, checkIn=12:10 PM, isCheckIn=1, checkOut=00}} }

我哪里错了?

【问题讨论】:

    标签: android firebase firebase-realtime-database kotlin


    【解决方案1】:

    要解决这个问题,请更改以下代码行:

    val key: String = dsnpNode.key.toString()
    

    val key: String = dsnpNode.key
    

    调用toString() 对您毫无帮助,因为键始终是字符串。

    并且还要更改以下代码行:

    val value: Any? = dsnpNode.child(key).child("checkIn").getValue().toString()
    

    val value: Any? = dsnpNode.child("checkIn").getValue(String::class.java)
    

    看,我已经删除了对.child(key) 的调用,因为不需要这样做。

    【讨论】:

    • 谢谢,它的工作。我只想知道checkIn 是日期节点的子节点,我们没有通过,那么它也可以工作,如何?
    • 只需调用hasChild()函数:dsnpNode.hasChild("checkIn")
    猜你喜欢
    • 2018-11-30
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多