我不确定我是否了解他们之间的区别:
如我所见,realm.createObject
不能真正更新现有密钥(得到错误:主键值已存在)
选项1:
try (Realm realm = Realm.getDefaultInstance()) {
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(@NonNull Realm realm) {
CacheFastObjTest a = realm.createObject(CacheFastObjTest.class, key);
a.setDataType(className.getName());
a.setExpireTimestamp(expires.getTime());
a.setText1("dsaf");
a.setText2("234234324");
realm.insertOrUpdate(a);
}
});
}
选项2:
try (Realm realm = Realm.getDefaultInstance()) {
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(@NonNull Realm realm) {
CacheFastObjTest a = new CacheFastObjTest();
a.setKey(key);
a.setDataType(className.getName());
a.setExpireTimestamp(expires.getTime());
a.setText1("dsaf");
a.setText2("234234324");
realm.insertOrUpdate(a);
}
});
}
最佳答案
CacheFastObjTest a = realm.where(CacheFastObjTest.class).equalTo("id", key).findFirst();
if(a == null) {
a = realm.createObject(CacheFastObjTest.class, key);
}
a.setDataType(className.getName());
a.setExpireTimestamp(expires.getTime());
a.setText1("dsaf");
a.setText2("234234324");
//realm.insertOrUpdate(a);