领域主键约束异常:值已存在

时间:2017-02-04 14:57:05

标签: android realm

当我遍历我的列表以将所有对象添加到Realm时,以下每个对象都会覆盖它们,以便RecyclerView只显示一个图像。

现在我有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
}

我在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?

1 个答案:

答案 0 :(得分: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");
            }
        }
    });

如您所见,关键是搜索主键对象,然后进行编辑。