В проекте, который сейчас находится в стадии разработки, мы интегрируем База данных Realm в приложение клиента, чтобы повысить скорость реагирования при работе с огромным набором данных из ~ 20 000 записей. Для представления на экране мы добавляем Android Recyclerview от Realm. Большинство вариантов использования - это операции чтения, за которыми следует возможность расширенного поиска и / или фильтрации записей.
Там, где в некоторых наших представлениях есть проблемы с обувью, из всех данных данного типа предполагается отображать только подмножество записей, выбранных серверной частью. Используя информацию, передаваемую API, мы выполняем первоначальную фильтрацию и настраиваем представление.
Теперь, используя вышеупомянутые технологии, существует ли читаемый и поддерживаемый способ сохранить либо это предварительно отфильтрованное подмножество, либо запрос, извлекающий его для дальнейшего использования, чтобы исходное состояние представления всегда можно было восстановить после просмотра поиска и / или фильтров очищены? Или же следует сохранить ответ API с повторным применением условий, заданных через него, быть единственным способом сделать это? Применение любых новых условий к запросу, кажется, меняет его навсегда, то же самое касается применения новых запросов к результатам. Разве не должен быть способ создать себе новый набор результатов на основе старого, но не нарушая последний?
Обновлено: наше приложение является двуязычным, поэтому приветствуются решения на основе Java и Kotlin, если они отличаются.
Подождите, AFAIK, если вы выполняете realmResults.where(), вы можете создать дополнительные параметры запроса, и вызов findAll() создаст новые результаты. Если вы сохраните старый realmResults, то эти условия не будут потеряны.
Да, @EpicPandaForce, через некоторое время мы поняли, что это действительно так. Должно быть, поведение объектов RealmQuery заставило нас поверить, что решение не будет таким простым. Кроме того, мы не нашли ни одного онлайн-примера, который действительно пытался бы воссоздать наш вариант использования, то есть основывать наш механизм поиска не на всем наборе объектов, а на подмножестве.




Как мы поняли через некоторое время в начале этой недели, и как @EpicPandaForce упомянул в комментариях, в то время как объект RealmQuery не может быть «моментальным снимком», назначая его резервной переменной перед его расширением, то же самое не относится к RealmResults объекты. Так что:
RealmResults<Obj> widerResults = realmInstance.where(Obj.class).in("id", idArray).findAll;
RealmResults<Obj> narrowerResults = widerResults.where().equalTo("flag", true).findAll;
Обеспечит два независимых набора результатов. Более широкий можно использовать в соответствии с выделенным мной вариантом использования - рассматривать его как отправную точку для дальнейших подзапросов. Изменения в объектах, обнаруженные в самих наборах, по-прежнему будут отражены в обоих наборах.
Предоставление ответа всем заблудшим душам, если они застрянут, как мы.
вы используете для поиска столбец @Index? попробуй один раз