2017-12-24 17 views
0

私はFirebaseRecyclerAdapterを持っています。これはチャットの一覧を表示するために使用されています。 は、今ではすべてのチャットを示しており、私はそれが「ユーザー」のアレイに現在のfirebaseのユーザーIDが含まれている唯一のチャット表示する:FirebaseRecyclerAdapterのフィルタデータ

enter image description here

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

This method@NonNullと注釈されていますので、パーサーはnullの値を返すとは限りません。

つのオプションが頭に浮かぶ:

A)FirebaseUI-Androidを使用しないでください。フィルタリング結果は、通常のアダプタを使用して、たとえば子供の代わりに値を要求し、DiffUtilを使用して変更を計算することなどが可能です。しかし、それを行うための他の方法もあります!

b)データを再構成します。たとえば、このユーザーが参加しているチャットのキーを保持するユーザーごとに個別のコレクションを作成できます。

これを行うには別の方法があるかもしれませんが、それはあなたの質問を読んで心に浮かんだものです。お役に立てれば!

関連する問題