【问题标题】:Filter data for FirebaseRecyclerAdapterFirebaseRecyclerAdapter 的过滤数据
【发布时间】:2018-06-06 06:35:41
【问题描述】:

我有一个FirebaseRecyclerAdapter,用于显示聊天列表。 现在它显示所有聊天,我希望它只显示在“用户”数组中包含当前 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。 按当前用户过滤聊天的最佳方式是什么?

【问题讨论】:

    标签: android firebase firebase-realtime-database kotlin firebaseui


    【解决方案1】:

    This method 带有 @NonNull 注释,所以我猜你的解析器不会返回 null 值。

    想到两个选项:

    a) 不要使用FirebaseUI-Android。可以使用常规适配器过滤结果,例如,请求值而不是子项,并使用DiffUtil 来计算更改。但也有其他方法可以做到这一点!

    b) 重构您的数据。例如,您可以为每个用户创建一个单独的集合,其中包含该用户所属的聊天的密钥。

    可能还有其他方法可以做到这一点,但这就是阅读您的问题时想到的。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      • 2017-05-26
      • 2021-11-24
      • 2017-11-02
      • 1970-01-01
      • 2018-06-18
      相关资源
      最近更新 更多