Nano Hash - криптовалюты, майнинг, программирование

Android: как обновлять список реалмов в пользовательском интерфейсе

У меня есть recyclerview, который показывает список студентов. Все учащиеся содержатся в списке областей в адаптере.

Когда пользователь может запросить обновление данных, сервер отправляет список студентов обратно пользователю. Что я делаю сейчас, так это загружаю всю информацию с сервера, сохраняю ее в БД, затем извлекаю ее из базы данных (через realmresults) и затем преобразую realmresult в realmlist.

Мой вопрос в том, как правильно обновить пользовательский интерфейс? В документации я видел, что у realmlist есть управляемый режим, в котором они автоматически обновляют пользовательский интерфейс. Что это за управляемый режим? Что это значит? Как использовать список областей, чтобы держать его в управляемом состоянии? И как правильно (иначе говоря, лучшая практика) использовать реалмлисты?

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

05.04.2016

Ответы:


1

Управляемый объект и автономный

Автономный RealmObject/RealmList создается с помощью конструктора объекта или метода Realm.copyFromRealm(). Доступ к данным в автономном объекте не будет проходить через механизм хранения подчеркивания, вместо этого он ведет себя как обычный объект. Поэтому автономный объект не будет обновляться при изменении данных. Примеры для автономного объекта:

MyModel myModel = new MyModel(); // Standalone

MyModel model = realm.where(MyModel.class).findFirst(); // This is managed object.
MyModel standaloneModel = realm.copyFromRealm(model); // The returned value is standalone object.

MyList myList = new MyList(); // Standalone

Управляемые RealmObject/RealmList получают доступ к данным через базовый механизм хранения Realm. Они создаются, когда вы делаете запрос из Realm или возвращаетесь из copyToRealm() (и его альтернативных методов). Нравиться:

MyModel model = realm.where(MyModel.class).findFirst();

MyModel model = new MyModel(); // This is a standalone object.
model = realm.copyToRealm(modle); // The returned value is managed by Realm now.

MyList myList = realm.where(MyModel.class).findFirst().getMyList();

Как правильно обновить пользовательский интерфейс

Предлагается использовать прослушиватели изменений Realm. См. https://realm.io/docs/java/latest/#notifications.

И как правильно (также известный как передовой опыт) использовать RealmList?

Это немного сбивает с толку, но Realm представляет RealmCollection в следующем крупном выпуске (v0.89.0). См. https://github.com/realm/realm-java/pull/2345.

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

Если RealmList находится в управляемом режиме, изменения данных также будут сохранены. Если вы не хотите, чтобы некоторые данные сохранялись, вы можете использовать аннотацию @Ignore для этих полей. См. https://realm.io/docs/java/latest/#ignoring-properties< /а>


Обновление от 04072016

RealmList против RealmResults:

RealmList — это список RealmObject, сохраненный как поле RealmObject. Он представляет отношения «один ко многим» в Realm.

RealmResults - это результаты запроса.

Оба они (если RealmList в управляемом режиме) будут автоматически обновляться при изменении данных.

Вы можете получить RealmResults из RealmList по RealmList.where()< /а> как:

RealmResults results = myRealmList.where().findAll();

Этот ответ будет немного устаревшим после выпуска Realm v0.89.0 из-за нового RealmCollection.

06.04.2016
  • Привет! Спасибо за ваш ответ! Не могли бы вы сказать мне, в чем разница между realmlist и realmresults? Если оба могут изменить базовые данные, то зачем кому-то использовать realmlist? Я имею в виду, если я правильно понимаю, результаты realm всегда обновляют мой пользовательский интерфейс, так почему я должен просто использовать их? В чем разница между realmresults и realmlist? Когда мы должны использовать каждый из них? 06.04.2016
  • Еще раз спасибо за ответ :) я решил, что мой лучший вариант на данный момент - это использовать realmlist, так как я часто использую методы добавления и удаления, что невозможно с realmresults, я надеюсь, что realmcollections также будет иметь это также метод. Это дает нам большую гибкость для одновременного хранения разных списков и добавления в них новой информации без сохранения их в базе данных. 07.04.2016
  • Кроме того, мы не можем использовать realmresults, так как он удаляет объекты из базы данных, как только мы вызываем remove/clear, и единственный способ добавить объекты в список — действительно сохранить их в базе данных, будет ли realmcollection поддерживать добавление/удаление объектов из нее. не заставляя нас сохранять/удалять их из базы данных? 07.04.2016
  • Прямо сейчас, если я хочу получить новые элементы с сервера и использовать результаты realmresults, мне нужно сохранить их в базе данных, запросить, чтобы получить результаты, обновить recycleradapter новым списком, который заставит его перезагрузить список и сбросить список. элементы, все это кажется большой работой, если я хочу просто добавить несколько элементов в список.. Или я делаю что-то не так? 07.04.2016
  • requery для получения результатов, не нужно повторно запрашивать, результаты будут обновляться при изменении базы данных, если вы не хотите изменить условия запроса. просто зарегистрируйте слушателя, обновите представление. См. github.com/realm/realm-java/pull/2548. 08.04.2016
  • Хм, это странно, потому что, когда я получаю новые данные с сервера, если я не делаю повторный запрос, то объект realmresult остается с тем же размером, что и до выборки, я имею в виду, что я не вижу там новые извлеченные объекты без повторного запроса, с realmlist я могу использовать методы add/addall, а не просто вызывать notifyitemrangechanged, но с realmresults это работает, только если я повторно запрашиваю, а затем вызываю notifydatasetchanged (он обновляет все элементы в recyclerview) 08.04.2016
  • Обновление запускается событием обработчика. что означает, что он отражает текущий поток в следующем цикле событий. Итак, попробуйте зарегистрировать слушателя и проверить, меняется ли там RealmResults. 08.04.2016
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..