Realm.io - 如何更新对象?
Realm.io - How to update object?
我正在使用 0.81.1 版本的 Realm。我有这个 class:
public class KanjiComp extends RealmObject {
@PrimaryKey
private String character;
private String strokes;
private int frequency;
public String getCharacter() {
return character;
}
public void setCharacter(String character) {
this.character = character;
}
public String getStrokes() {
return strokes;
}
public void setStrokes(String strokes) {
this.strokes = strokes;
}
public int getFrequency() {
return frequency;
}
public void setFrequency(int frequency) {
this.frequency = frequency;
}
}
我第一次这样创建对象:
KanjiComp realmKanjiComp = realm.createObject(KanjiComp.class);
realmKanjiComp.setCharacter(cur.getString(cur.getColumnIndex("literal")));
realmKanjiComp.setStrokes(cur.getString(cur.getColumnIndex("strokes")));
realmKanjiComp.setFrequency(0);
我想增加频率值。为此,我需要帮助我更新频率的方法。
Realm 文档是这样说的:
Using primary keys makes it possible to use the createOrUpdate()
method, which will look for an existing object with this primary key,
an update it if it finds one; if none are found, it will create a new
object instead.
但我找不到 createOrUpdate() 方法。使用 JSON 的所有方法。
我的完整代码如下所示:
try {
KanjiComp realmKanjiComp = realm.createObject(KanjiComp.class);
character = cur.getString(cur.getColumnIndex("literal"));
realmKanjiComp.setCharacter(cur.getString(cur.getColumnIndex("literal")));
realmKanjiComp.setStrokes(cur.getString(cur.getColumnIndex("strokes")));
realmKanjiComp.setFrequency(0);
} catch (Exception e) {
RealmQuery<KanjiComp> query = realm.where(KanjiComp.class);
query.equalTo("character", character);
RealmResults<KanjiComp> rKanjiComp = query.findAll();
KanjiComp oldKanjiComp = rKanjiComp.get(0);
KanjiComp realmKanjiComp = realm.update(KanjiComp.class);//update is underlined
realmKanjiComp.setCharacter(cur.getString(cur.getColumnIndex("literal")));
realmKanjiComp.setStrokes(cur.getString(cur.getColumnIndex("strokes")));
realmKanjiComp.setFrequency(oldKanjiComp.getFrequency()+1);
}
所以我的问题是,如何更新对象的值?有什么方法可以增加我的对象的价值吗?
我会选择这样的东西:
void createKanjiCompOrUpdateFrequency() {
// This query is fast because "character" is an indexed field
KanjiComp kanjoComp = realm.where(KanjiComp.class)
.equalTo("character", someValue)
.findFirst();
realm.beginTransaction();
if (kanjiComp == null) {
KanjiComp kanjiComp = realm.createObject(KanjiComp.class);
// set the fields here
} else {
kanjiComp.setFrequency(kanjiComp.getFrequency() + 1);
}
realm.commitTransaction();
}
我正在使用 0.81.1 版本的 Realm。我有这个 class:
public class KanjiComp extends RealmObject {
@PrimaryKey
private String character;
private String strokes;
private int frequency;
public String getCharacter() {
return character;
}
public void setCharacter(String character) {
this.character = character;
}
public String getStrokes() {
return strokes;
}
public void setStrokes(String strokes) {
this.strokes = strokes;
}
public int getFrequency() {
return frequency;
}
public void setFrequency(int frequency) {
this.frequency = frequency;
}
}
我第一次这样创建对象:
KanjiComp realmKanjiComp = realm.createObject(KanjiComp.class);
realmKanjiComp.setCharacter(cur.getString(cur.getColumnIndex("literal")));
realmKanjiComp.setStrokes(cur.getString(cur.getColumnIndex("strokes")));
realmKanjiComp.setFrequency(0);
我想增加频率值。为此,我需要帮助我更新频率的方法。
Realm 文档是这样说的:
Using primary keys makes it possible to use the createOrUpdate() method, which will look for an existing object with this primary key, an update it if it finds one; if none are found, it will create a new object instead.
但我找不到 createOrUpdate() 方法。使用 JSON 的所有方法。
我的完整代码如下所示:
try {
KanjiComp realmKanjiComp = realm.createObject(KanjiComp.class);
character = cur.getString(cur.getColumnIndex("literal"));
realmKanjiComp.setCharacter(cur.getString(cur.getColumnIndex("literal")));
realmKanjiComp.setStrokes(cur.getString(cur.getColumnIndex("strokes")));
realmKanjiComp.setFrequency(0);
} catch (Exception e) {
RealmQuery<KanjiComp> query = realm.where(KanjiComp.class);
query.equalTo("character", character);
RealmResults<KanjiComp> rKanjiComp = query.findAll();
KanjiComp oldKanjiComp = rKanjiComp.get(0);
KanjiComp realmKanjiComp = realm.update(KanjiComp.class);//update is underlined
realmKanjiComp.setCharacter(cur.getString(cur.getColumnIndex("literal")));
realmKanjiComp.setStrokes(cur.getString(cur.getColumnIndex("strokes")));
realmKanjiComp.setFrequency(oldKanjiComp.getFrequency()+1);
}
所以我的问题是,如何更新对象的值?有什么方法可以增加我的对象的价值吗?
我会选择这样的东西:
void createKanjiCompOrUpdateFrequency() {
// This query is fast because "character" is an indexed field
KanjiComp kanjoComp = realm.where(KanjiComp.class)
.equalTo("character", someValue)
.findFirst();
realm.beginTransaction();
if (kanjiComp == null) {
KanjiComp kanjiComp = realm.createObject(KanjiComp.class);
// set the fields here
} else {
kanjiComp.setFrequency(kanjiComp.getFrequency() + 1);
}
realm.commitTransaction();
}