簡體   English   中英

如何從當前用戶獲取FirebaseDataBase快照?

[英]How to get FirebaseDataBase Snapshot from current user?

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放入ref值時,應用都會因以下錯誤而崩潰:

2018-11-23 22:04:48.414 3871-3871 / my.app E / RecyclerView:未連接適配器; 跳過布局2018-11-23 22:04:49.797 3871-3871 / my.app E / AndroidRuntime:致命例外:主進程:nobrand.ljb.musicshare,PID:3871 com.google.firebase.database.DatabaseException:可以t將類型為java.lang.String的對象轉換為類型myapp.User

當我沒有將$userkey放入我的參考值時。 該應用程序正常運行,可以按預期顯示所有用戶,但是正如我所說,我不希望那樣。 我會很感激每一個答案和建議!

如果您直接訪問正確的子節點,則不再需要代碼中的循環。

這意味着有兩種簡單的方法可以做到這一點:

  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();
    }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM