Reputation: 412
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
}
}
I wanted to make a snapshot from my current user like this, every time I put the $userkey
in my ref value the app crashes with this error:
2018-11-23 22:04:48.414 3871-3871/my.app E/RecyclerView: No adapter attached; skipping layout 2018-11-23 22:04:49.797 3871-3871/my.app E/AndroidRuntime: FATAL EXCEPTION: main Process: nobrand.ljb.musicshare, PID: 3871 com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type myapp.User
When I didn't put the $userkey
in my ref value. The app functions as normal put displays all users as expected, but as I said I don't want that.
I'll be thankful for every answer and suggestion!
Upvotes: 0
Views: 114
Reputation: 598740
If you directly access the correct child node, the loop in your code is not needed anymore.
This means there are two simple ways to do this:
I'd recommend removing the loop as there's really no need for it anymore, but wanted to show both options.
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();
}
})
Upvotes: 1