当我遍历我的列表以将所有对象添加到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?
答案 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");
}
}
});
如您所见,关键是搜索主键对象,然后进行编辑。