Android Realm.io-如何更新对象?

Android Realm.io-如何更新对象?,android,realm,Android,Realm,我正在使用0.81.1版本的Realm。我有这门课: public class KanjiComp extends RealmObject { @PrimaryKey private String character; private String strokes; private int frequency; public String getCharacter() { return character; } pub

我正在使用0.81.1版本的Realm。我有这门课:

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);
        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();
}
我想增加频率值。为此,我需要一种方法来帮助我更新频率

Realm文档说明:

使用主键可以使用createOrUpdate()命令 方法,该方法将查找具有此主键的现有对象, 如果发现一个,则更新它;如果没有找到,它将创建一个新的 反对

但是我找不到createOrUpdate()方法。使用JSON的所有方法。

我的完整代码如下所示:

    KanjiComp realmKanjiComp = realm.createObject(KanjiComp.class);
    realmKanjiComp.setCharacter(cur.getString(cur.getColumnIndex("literal")));
    realmKanjiComp.setStrokes(cur.getString(cur.getColumnIndex("strokes")));
    realmKanjiComp.setFrequency(0);
        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();
}
试试看{
KanjiComp realmKanjiComp=realm.createObject(KanjiComp.class);
character=cur.getString(cur.getColumnIndex(“literal”);
setCharacter(cur.getString(cur.getColumnIndex(“literal”));
realmKanjiComp.setStrokes(cur.getString(cur.getColumnIndex(“strokes”));
realmKanjiComp.setFrequency(0);
}捕获(例外e){
RealmQuery=realm.where(KanjiComp.class);
query.equalTo(“字符”,字符);
RealmResults rKanjiComp=query.findAll();
KanjiComp oldKanjiComp=rKanjiComp.get(0);
KanjiComp realmKanjiComp=realm.update(KanjiComp.class);//更新带下划线
setCharacter(cur.getString(cur.getColumnIndex(“literal”));
realmKanjiComp.setStrokes(cur.getString(cur.getColumnIndex(“strokes”));
realmKanjiComp.setFrequency(oldKanjiComp.getFrequency()+1);
}

所以我的问题是,如何更新我的对象的值?有什么方法可以增加我的对象的值吗?

我会这样做:

    KanjiComp realmKanjiComp = realm.createObject(KanjiComp.class);
    realmKanjiComp.setCharacter(cur.getString(cur.getColumnIndex("literal")));
    realmKanjiComp.setStrokes(cur.getString(cur.getColumnIndex("strokes")));
    realmKanjiComp.setFrequency(0);
        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();
}

尝试将其包装在事务中。realm.executeTransaction(新realm.Transaction(){@Override public void execute(realm realm){KanjiComp testObject=realm.createObject(KanjiComp.class);testObject.setValue(value);realm.copyToRealmOrUpdate(testObject);});字符字段的类型是什么。。。我不认为我们可以保存域中的char文件。。您是否使用
String
替换字符?