Не удается получить данные из dataSnapShot в Android

Я проверил эти и другие вопросы о том, как получить данные из dataSnapShot, поэтому сначала прочитайте вопрос.

Ниже приведена структура моей базы данных Firebase, в которой я все это выполняю.

Не удается получить данные из dataSnapShot в Android

Я реализовал приведенный ниже код для получения/чтения данных из 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}} }

где я не прав?

2
0
589
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 является дочерним элементом узла даты, и мы не передаем его, а затем он работает, как?

Shailesh 23.04.2019 13:21

Просто вызовите функцию hasChild(): dsnpNode.hasChild("checkIn").

Alex Mamo 23.04.2019 13:40

Другие вопросы по теме