Realm: избавиться от дублирования элементов в RealmList

sashatinkoff
Aug 29, 2017 · 2 min read

Апдейт данных через createOrUpdateAllFromJson — удобная штука, однако без танцев с бубном не обошлось — данные из свойства объекта типа RealmList дублируются только в путь. Как это решить?

Итак, возьмем абстрактную задачу — есть курс обучения, в котором есть список студентов. Время от времени приложение запрашивает обновление с сервера, при этом локальные данные не хотелось бы терять. Метод Realm.createOrUpdateAllFromJson помогает в этом как нельзя лучше — пусть и немного кривоватое решение, но оно работает

If updating a {@link RealmObject} and a field is not found in the JSON object, that field will not be updated.

Сохраняются все Realm модели у меня с помощью метода save(). Обычно в нем содержится что-то типа

Но конкретно в данном случае этот метод не прокатит. Поэтому пришлось написать следующую конструкцию (по шагам),

  • Берем модель с обновленными данными (как они заполняются — не важно)
  • Создаем массив с одним элементом — конкретно сохраняемым экземпляром класса
  • Создаем json строку из массива
  • Сохраняем ее с помощью createOrUpdateAllFromJson

(в этот момент можно открыть Realm Browser и убедиться, что после нескольких сейвов данные в RealmList дублируются только в путь). Поэтому

  • Берем наше поле, удаляем в нем дубликаты и пересохраняем объект.
  • Добавляем красоты, универсальности и вот этого всего.

Процедура сохранения объекта выглядит просто замечательно:

Ну и конечно же опишем интерфейс, который нам помогает все сделать чисто и симпатично:

P.S. Если вы попытались, но у вас не работает, подумайте — а что именно экземпляр делает уникальным?

Переопределите метод equals в вашем классе. Желательно, конечно, по primary key.

О разработке для Android

Нет единственно правильного решения любой задачи, их (решений) — множество. Я предлагаю вам одни варианты и не настаиваю на их использовании.

)
sashatinkoff

Written by

Пишу о разном с матом ем булку с маком никогда не бегал с автоматом

О разработке для Android

Нет единственно правильного решения любой задачи, их (решений) — множество. Я предлагаю вам одни варианты и не настаиваю на их использовании.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade