Данные фильтра для 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
    Добавление сабвуфера в textView в Anko Использование Moshi с несколькими полями ввода Как реализовать шаблон проектирования шаблонов в Котлине? Как получить ext. * Переменные в блок плагинов в build.gradle.kts Тип свойства – это не тип переопределения Как указать @Throws для свойства в интерфейсе Android – Как установить ColumnComparator в SortTableView с Kotlin Android Kotlin Защищенное свойство предоставляет свой закрытый тип ExpiresLayout Kotlin запускается в случае сбоя Android Studio «Не удалось синхронизировать Gradle: время ожидания подключения: подключитесь к журналу IDE для получения дополнительной информации (Help | Show Log)» Kotlin OnTouchListener вызвал, но он не отменяет performClick У Kotlin есть array.indexOf, но я не могу понять, как это сделать array.indexOfBy {lambda} Вызов «супер (прототип)» из Java на открытый класс данных Котлина DTO Vertx plus Kotlin coroutines вечно вешает Использование Parceler с классом данных Kotlin с конструктором для сериализации Ошибка android-kotlin: неразрешенные ссылки привязки данных и ActivityMainBinding