Данные фильтра для FirebaseRecyclerAdapter

У меня есть FirebaseRecyclerAdapter который используется для отображения списка чатов. Теперь он показывает все чаты, и я хочу, чтобы он показывал только чаты, которые содержат текущий идентификатор пользователя firebase в массиве «users»:

введите описание изображения здесь

  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 } 

}

но он вызывает NPE в одном из классов firebase. Каков наилучший способ фильтрации чатов текущего пользователя?

    Этот метод аннотируется с @NonNull поэтому я предполагаю, что ваш парсер не должен возвращать null значение.

    На ум приходят два варианта:

    a) Не используйте FirebaseUI-Android . Результаты фильтрации можно было бы использовать с помощью обычного адаптера и, например, запрашивая значение вместо детей и используя DiffUtil для вычисления изменений. Но есть и другие способы сделать это!

    б) реструктурируйте свои данные. Например, у вас может быть отдельная коллекция для каждого пользователя, которая содержит ключи чатов, к которым этот пользователь входит.

    Могут быть другие способы сделать это, но это то, что приходило на ум, читая ваш вопрос. Надеюсь это поможет!

    Intereting Posts
    Компоненты архитектуры Android Room ViewModel CompleteableFormAction Объединение данных из разных Observables и выбор различных стратегий получения, в зависимости от доступности данных «Ни одна из следующих функций не может быть вызвана с аргументами, предоставленными« с топливным HTTP-протоколом » Hibernate @OneToMany join table throws StackOverflowException Кинжал инъекции не работает в Котлин Файл-файл TornadoFX Kotlin: доступ к параметру when-statement Разница между типами List и Array в Котлине Kotlin, ориентированный на Java interop: Идиоматический тип для ленивой коллекции? В чем разница между этими способами для определения функций? Альтернатива перегрузкам функций Каков правильный синтаксис для переопределения функции члена интерфейса с помощью модификатора видимости? Ошибка с JSONObject () – Kotlin Фрагмент: RelativeLayout Видимость не изменяется в OnCreateView Могут ли функции расширения быть вызваны «статическим» способом?