簡體   English   中英

Realm.io - 如何更新對象?

[英]Realm.io - How to update object?

我正在使用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);

我想增加頻率值。 為此我需要幫助我更新頻率的方法。

領域文檔說明了這一點:

使用主鍵可以使用createOrUpdate()方法,該方法將查找具有此主鍵的現有對象,如果找到,則更新它; 如果沒有找到,它將創建一個新對象。

但我找不到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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM