Używam wersji Realms w wersji 0.81.1. Mam tej klasy:Realm.io - Jak zaktualizować obiekt?
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;
}
}
Po raz pierwszy, tworzę obiekt tak:
KanjiComp realmKanjiComp = realm.createObject(KanjiComp.class);
realmKanjiComp.setCharacter(cur.getString(cur.getColumnIndex("literal")));
realmKanjiComp.setStrokes(cur.getString(cur.getColumnIndex("strokes")));
realmKanjiComp.setFrequency(0);
Chcę zwiększyć wartość częstotliwości. W tym celu potrzebuję metody, która pomoże mi zaktualizować częstotliwość.
dokumentacja Realm mówi tak:
Korzystanie z kluczy pierwotnych umożliwia korzystanie z createOrUpdate() metodę, która będzie szukać istniejącego obiektu z tego klucza podstawowego, aktualizacja to jeżeli stwierdzi jedną ; jeśli żaden nie zostanie znaleziony, utworzy nowy obiekt .
Ale nie mogłem znaleźć metody createOrUpdate(). Wszystkie metody pracy z JSON.
mój pełny kod wygląda następująco:
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);
}
Więc moje pytanie brzmi, jak zaktualizować wartość mojego obiektu? Czy istnieje sposób na zwiększenie wartości mojego obiektu?
Spróbuj owinąć go w transakcji. realm.executeTransaction (nowa Realm.Transaction() { @Override public void execute (Realm realm) { KanjiComp testObject = realm.createObject (KanjiComp.class); testObject.setValue (value); realm.copyToRealmOrUpdate (testObject); } }); –
Dziękuję, Maksim! –