【发布时间】:2015-01-29 04:18:40
【问题描述】:
我应该如何使用 android 中的领域数据库更新已经存在的值?
我一直在尝试更新它,但它只是作为新值添加而不是覆盖它
【问题讨论】:
-
请向我们展示您的努力(代码的相关部分,您尝试更新的地方)。只有这样我们才能告诉您问题出在哪里。
-
通过示例查看完整答案stackoverflow.com/questions/30933229/…
我应该如何使用 android 中的领域数据库更新已经存在的值?
我一直在尝试更新它,但它只是作为新值添加而不是覆盖它
【问题讨论】:
在 Realm DB 中更新现有对象及其所有字段的另一种方法是使用方法realm.copyToRealmOrUpdate():
Object obj = new Object();
obj.setField1(field1);
obj.setField2(field2);
realm.beginTransaction();
realm.copyToRealmOrUpdate(obj);
realm.commitTransaction();
如果你的对象有一个主键,这个方法会自动更新对象,没有重复的对象:)
【讨论】:
realm.copyToRealmOrUpdate(obj);。仅当您使用 Retrofit 时才需要它,例如:realm.io/docs/java/latest/#retrofit
createObject(),我会得到Realm Database Error: Value already exists:)。
您可以使用 insertOrUpdate 方法来执行此操作。希望这会有所帮助
Realm.getDefaultInstance().executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
objectToEdit.setNewValue("string");
realm.insertOrUpdate();
}
});
【讨论】:
Realm realm = Realm.getDefaultInstance();
OrderedRealmCollection<Practice> orderedRealmCollection =
realm.where(Practice.class)
.contains("key", "matchig value")
.findAll();
if(orderedRealmCollection.size()!=0){
Practice practice = orderedRealmCollection.first();
Realm.getDefaultInstance().executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
practice.setUpdate_practice_steps(""+steps);
realm.insertOrUpdate(practice);
}
});
}
【讨论】: