Обновление в Realm android

18

Как мне обновить уже существующее значение, используя realm DB в android?

Я пытаюсь обновить его, но добавляет его как новое значение, но не перезаписывая его

    
задан Dinu 01.12.2014 в 08:35
источник
  • Пожалуйста, покажите нам свои усилия (соответствующая часть вашего кода, где вы пытаетесь обновить). Только тогда мы сможем рассказать вам, где проблема. –  DroidDev 01.12.2014 в 08:37
  • см. полный ответ с примером stackoverflow.com/questions/30933229/... –  N J 04.08.2015 в 16:22

2 ответа

35

Другой способ обновить существующий объект со всеми его полями в вашей Realm DB - это использовать метод realm.copyToRealmOrUpdate() :

Object obj = new Object();
obj.setField1(field1);
obj.setField2(field2);
realm.beginTransaction();
realm.copyToRealmOrUpdate(obj);
realm.commitTransaction();

Если ваш объект имеет Основной ключ , этот метод автоматически обновит объект без дублирования объектов:)

Дополнительная информация: copyToRealmOrUpdate ()     

ответ дан j_gonfer 26.05.2015 в 11:16
источник
  • Вы фактически не получаете никакой пользы от начала транзакции, прежде чем ваш объект будет создан. Поэтому я хотел бы предложить перенести эту первую строку перед copyToRealmOrUpdate (), чтобы она понятна. –  bmunk 28.05.2015 в 23:21
  • Спасибо за совет, отредактировал пост :) –  j_gonfer 29.05.2015 в 14:22
  • @MicroR Итак, какова альтернатива? Как обновить существующее значение в Realm? (Я получаю ошибку базы данных Realm: значение уже существует: если я использую createObject ()). –  Srikar Reddy 13.11.2016 в 21:17
  • Первичный ключ разрешен моей проблемой .. спасибо .. –  Shylendra Madda 04.05.2017 в 21:36
  • Из документации: «Использование первичных ключей позволяет использовать метод copyToRealmOrUpdate (), который будет искать существующий объект с этим первичным ключом и обновлять его, если он найден" –  Vinicius Lima 09.07.2017 в 21:09
Показать остальные комментарии
6

Вы можете использовать метод insertOrUpdate для этого. Надеемся, что это поможет

  Realm.getDefaultInstance().executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {

                    objectToEdit.setNewValue("string");
                    realm.insertOrUpdate();
                }
            });
    
ответ дан John 09.02.2017 в 13:04
источник