2017-02-04 10 views
0

Когда я просматриваю свой список, чтобы добавить все объекты в Realm, они переписываются каждым из следующих, так что RecyclerView отображает только одно изображение.Исключение основного ключевого ключа Realm: значение уже существует

На данный момент у меня есть 3 случая:

  • Вызывать copyToRealmOrUpdate() каждый раз переписывает сохраненный объект.
  • Если я попытаюсь позвонить insert() с @PrimaryKey, то устанавливается RealmPrimaryKeyConstraintException: Value already exists: null.
  • Когда я удаляю @PrimaryKey аннотация Realm завершает работу и RecyclerView успешно показывает фотографии, но в дальнейшем все объекты могут иметь собственный дубликат, и это не выход.

Вот мои классы:

RealmObject класс

public class Picture extends RealmObject implements Serializable { 
    @PrimaryKey String picURL; 
    //getters/setters 
} 

Handler, где я непосредственно перебрать список в моем ImageModel.class

Handler handler = new Handler() { 
    @Override 
    public void dispatchMessage(Message msg) { 
     super.dispatchMessage(msg); 
     final List<Picture> list = (List<Picture>) msg.obj; 

     realm.executeTransaction(new Realm.Transaction() { 
      @Override 
      public void execute(Realm realm) { 
       for (Picture current : list) { 
        realm.copyToRealmOrUpdate(current); 
       } 
      } 
     }); 
    } 
}; 

Как сохранить каждый и каждый объект в Realm w без дублирования?

+0

Обработчик? Какие? Зачем? – EpicPandaForce

+1

'RealmPrimaryKeyConstraintException: Значение уже существует: null', тогда ваше поле' imgURL' является 'null', когда вы вызываете' copyToRealmOrUpdate() ' – EpicPandaForce

+0

Помог ли вам ответ? – OBX

ответ

1

Держите @primaryKey. А вот как вы бы обновить, из вашего кода:

realm.executeTransaction(new Realm.Transaction() { 
     @Override 
     public void execute(Realm realm) { 
      for (Picture current : list) { 
       Picture db = realm.where(Picture.class).equalTo("picURL",picURL).findFirst(); 
       db.setOtherMethod(true); 
       db.setAnotherMethod("hello"); 
      } 
     } 
    }); 

Как вы можете видеть, ключ для поиска первичного ключа объекта, а затем отредактировать его.

 Смежные вопросы

  • Нет связанных вопросов^_^