我有FirebaseRecyclerAdapter
,用于显示聊天列表。
现在它显示了所有聊天,我希望它只显示包含#34;用户"中的当前firebase用户ID的聊天。阵列:
mFirebaseDatabaseReference = FirebaseDatabase.getInstance().reference
val parser = SnapshotParser<ChatModel> { dataSnapshot ->
val chat = dataSnapshot.getValue(ChatModel::class.java)
if (chat != null) {
chat.id = dataSnapshot.key
}
chat
}
val chatsRef = mFirebaseDatabaseReference.child(ChatActivity.ROOMS_CHILD)
val options = FirebaseRecyclerOptions.Builder<ChatModel>()
.setQuery(chatsRef, parser)
.build()
mFirebaseAdapter = object : FirebaseRecyclerAdapter<ChatModel, ChatViewHolder>(options) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ChatViewHolder {
val inflater = LayoutInflater.from(parent.context)
val viewHolder = ChatViewHolder(inflater.inflate(R.layout.item_chat, parent, false))
return viewHolder
}
override fun onBindViewHolder(viewHolder: ChatViewHolder,
position: Int,
chatItem: ChatModel) {
}
}
我有想法以这种方式过滤SnapshotParser中的数据:
val parser = SnapshotParser<ChatModel> { dataSnapshot ->
val chat = dataSnapshot.getValue(ChatModel::class.java)
if (chat != null && chat.users.contains(mFirebaseUser?.uid)){ // I want to add this condition
chat.id = dataSnapshot.key
chat
} else {
null
}
}
但它会在其中一个firebase类中导致NPE。 当前用户过滤聊天的最佳方法是什么?
答案 0 :(得分:0)
This method使用@NonNull
进行了注释,因此我的猜测是您的解析器不会返回null
值。
有两种选择:
a)不要使用FirebaseUI-Android
。使用常规适配器可以过滤结果,例如,请求值而不是子项,并使用DiffUtil
来计算更改。但是还有其他方法可以做到这一点!
b)重组您的数据。例如,您可以为每个用户设置一个单独的集合,其中包含此用户所属聊天的键。
可能还有其他方法可以做到这一点,但这是您在阅读问题时所想到的。希望这有帮助!