Realm для Java / Android - сохранение состояния запроса / результата

В проекте, который сейчас находится в стадии разработки, мы интегрируем База данных Realm в приложение клиента, чтобы повысить скорость реагирования при работе с огромным набором данных из ~ 20 000 записей. Для представления на экране мы добавляем Android Recyclerview от Realm. Большинство вариантов использования - это операции чтения, за которыми следует возможность расширенного поиска и / или фильтрации записей.

Там, где в некоторых наших представлениях есть проблемы с обувью, из всех данных данного типа предполагается отображать только подмножество записей, выбранных серверной частью. Используя информацию, передаваемую API, мы выполняем первоначальную фильтрацию и настраиваем представление.

Теперь, используя вышеупомянутые технологии, существует ли читаемый и поддерживаемый способ сохранить либо это предварительно отфильтрованное подмножество, либо запрос, извлекающий его для дальнейшего использования, чтобы исходное состояние представления всегда можно было восстановить после просмотра поиска и / или фильтров очищены? Или же следует сохранить ответ API с повторным применением условий, заданных через него, быть единственным способом сделать это? Применение любых новых условий к запросу, кажется, меняет его навсегда, то же самое касается применения новых запросов к результатам. Разве не должен быть способ создать себе новый набор результатов на основе старого, но не нарушая последний?

Обновлено: наше приложение является двуязычным, поэтому приветствуются решения на основе Java и Kotlin, если они отличаются.

вы используете для поиска столбец @Index? попробуй один раз

Aks4125 20.08.2018 09:09

Подождите, AFAIK, если вы выполняете realmResults.where(), вы можете создать дополнительные параметры запроса, и вызов findAll() создаст новые результаты. Если вы сохраните старый realmResults, то эти условия не будут потеряны.

EpicPandaForce 24.08.2018 01:24

Да, @EpicPandaForce, через некоторое время мы поняли, что это действительно так. Должно быть, поведение объектов RealmQuery заставило нас поверить, что решение не будет таким простым. Кроме того, мы не нашли ни одного онлайн-примера, который действительно пытался бы воссоздать наш вариант использования, то есть основывать наш механизм поиска не на всем наборе объектов, а на подмножестве.

ryfterek 24.08.2018 08:35
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
221
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как мы поняли через некоторое время в начале этой недели, и как @EpicPandaForce упомянул в комментариях, в то время как объект RealmQuery не может быть «моментальным снимком», назначая его резервной переменной перед его расширением, то же самое не относится к RealmResults объекты. Так что:

RealmResults<Obj> widerResults = realmInstance.where(Obj.class).in("id", idArray).findAll;
RealmResults<Obj> narrowerResults = widerResults.where().equalTo("flag", true).findAll;

Обеспечит два независимых набора результатов. Более широкий можно использовать в соответствии с выделенным мной вариантом использования - рассматривать его как отправную точку для дальнейших подзапросов. Изменения в объектах, обнаруженные в самих наборах, по-прежнему будут отражены в обоих наборах.

Предоставление ответа всем заблудшим душам, если они застрянут, как мы.

Другие вопросы по теме