FireBase getValue возвращается как HasMap с ключом независимо от того, как я его прошу - PullRequest
0 голосов
/ 01 апреля 2019

Некоторые из моих данных хранятся в Firebase, как на скриншоте ниже, под родительским именем «голоса»:

enter image description here

Япытаясь получить только значение (-1), но продолжаю получать весь HashMap.

Ключ в этом случае представлен в моем коде как переменная с именем inititorId, а postVotesSnapshot представляет родительский снимок, который содержит много детейкак на скриншоте, который я прикрепил.

Я пробовал:

postVotesSnapshot.child(initiatorId).value или postVotesSnapshot.child(initiatorId).getValue(Integer::class.java)

И оба получили мне весь HashMap с ключомвызывая сбой, потому что мне нужно, чтобы значение было Int.

Я пытался:

val valueHash = postVotesSnapshot.child(initiatorId).getValue(HashMap::class.java)
val myValue = valueHash[initiatorId]

Но это не работает с *. 1024 *

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

Вот полный слушатель:

 val refVotes = if (postType == 0) {
        FirebaseDatabase.getInstance().getReference("/questions/$mainPostId/main/votes")
    } else {
        FirebaseDatabase.getInstance().getReference("/questions/$mainPostId/answers/$specificPostId/votes")
    }



    refVotes.addListenerForSingleValueEvent(object : ValueEventListener {
        override fun onCancelled(p0: DatabaseError) {

        }

        override fun onDataChange(postVotesSnapshot: DataSnapshot) {

            setVotesCount(specificPostId, mainPostId, votesView, postType)

            if (postVotesSnapshot.hasChild(initiatorId)) {

                val voteValue = postVotesSnapshot.child(initiatorId).getValue(Integer::class.java) //this line is the problematic one

                //I do stuff

            }
        }
    })
}

1 Ответ

1 голос
/ 01 апреля 2019

Попробуйте следующее:

val ref = firebase.child("posts")
ref.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot?) {
    val id = dataSnapshot.child(initiatorId).getValue(Integer::class.java)
  }
override fun onCancelled(error: FirebaseError?) {
  println(error!!.message)
   }
})

Предположим, у вас есть следующая база данных:

posts
   VMQPBq6YK3bJ12xIjGeTHsqaJC2 : -1

Здесь dataSnapshot будет на дочернем posts, тогда вам нужно присоединить addListenerForSingleValueEvent и получить доступ к дочернему initiatorId. Также предполагается, что initiatorId равен VMQPBq6YK3bJ12xIjGeTHsqaJC2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...