Как получить FirebaseDataBase Snapshot от текущего пользователя? - PullRequest
0 голосов
/ 24 ноября 2018
private fun getUserInfo() {


val userkey = FirebaseAuth.getInstance().uid ?: ""
val ref = FirebaseDatabase.getInstance().getReference("/users/$userkey")
ref.addListenerForSingleValueEvent(object: ValueEventListener {

    override fun onDataChange(p0: DataSnapshot) {
        val adapter = GroupAdapter<ViewHolder>()

        p0.children.forEach {
            Log.d("getUserInfo", it.toString())
            val user = it.getValue(User::class.java)
            if (user != null) {
                adapter.add(UserItem(user))
            }
        }

        UserInfo_RCView.adapter = adapter
    }

    override fun onCancelled(p0: DatabaseError) {

    }
})
}
}

class UserItem(val user: User): Item<ViewHolder>() {
override fun bind(viewHolder: ViewHolder, position: Int) {
    viewHolder.itemView.UsernameSettings_txt.text = user.username

    Picasso.get().load(user.profileImageUrl).into(viewHolder.itemView.ProfileImage_View)
}

override fun getLayout(): Int {
    return R.layout.userinfo
}
}

Я хотел сделать снимок от моего текущего пользователя, как этот, каждый раз, когда я добавляю $userkey в мое значение ссылки, приложение вылетает с этой ошибкой:

2018-11-23 22: 04: 48.414 3871-3871 / my.app E / RecyclerView: адаптер не подключен;пропущенный макетt преобразовать объект типа java.lang.String в тип myapp.User

Когда я не указал $userkey в качестве значения ref.Приложение работает как обычно, отображает всех пользователей, как и ожидалось, но, как я уже сказал, я этого не хочу.Я буду благодарен за каждый ответ и предложение!

1 Ответ

0 голосов
/ 24 ноября 2018

Если вы непосредственно обращаетесь к правильному дочернему узлу, цикл в вашем коде больше не нужен.

Это означает, что есть два простых способа сделать это:

  1. Запрос поключ
  2. Удалить цикл

Я бы порекомендовал удалить цикл, так как он больше не нужен, но хотел показать оба варианта.

Запрос поклавиша

val ref = FirebaseDatabase.getInstance().getReference("/users")
ref.orderByKey().equalTo(userkey).addListenerForSingleValueEvent(object: ValueEventListener {

    override fun onDataChange(p0: DataSnapshot) {
        val adapter = GroupAdapter<ViewHolder>()

        p0.children.forEach {
            Log.d("getUserInfo", it.toString())
            val user = it.getValue(User::class.java)
            if (user != null) {
                adapter.add(UserItem(user))
            }
        }

        UserInfo_RCView.adapter = adapter
    }

    override fun onCancelled(p0: DatabaseError) {
        throw p0.toException();
    }
})

Снятие петли

val ref = FirebaseDatabase.getInstance().getReference("/users/$userkey")
ref.addListenerForSingleValueEvent(object: ValueEventListener {

    override fun onDataChange(p0: DataSnapshot) {
        val adapter = GroupAdapter<ViewHolder>()

        val user = p0.getValue(User::class.java)
        if (user != null) {
            adapter.add(UserItem(user))
        }

        UserInfo_RCView.adapter = adapter
    }

    override fun onCancelled(p0: DatabaseError) {
        throw p0.toException();
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...