2015-07-06 37 views
9

Tôi đang sử dụng phiên bản 0.81.1 của Realm. Tôi có lớp này:Realm.io - Cách cập nhật đối tượng?

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; 
    } 
} 

Đối với lần đầu tiên, tôi có thể tạo đối tượng như thế này:

KanjiComp realmKanjiComp = realm.createObject(KanjiComp.class); 
    realmKanjiComp.setCharacter(cur.getString(cur.getColumnIndex("literal"))); 
    realmKanjiComp.setStrokes(cur.getString(cur.getColumnIndex("strokes"))); 
    realmKanjiComp.setFrequency(0); 

Tôi muốn tăng giá trị tần số. Với mục đích này, tôi cần phương pháp giúp tôi cập nhật tần số.

tài liệu Realm nói điều này:

Sử dụng khóa chính làm cho nó có thể sử dụng phương pháp createOrUpdate(), mà sẽ tìm kiếm một đối tượng hiện với khóa chính này, một bản cập nhật nó nếu nó tìm thấy một ; nếu không tìm thấy, nó sẽ tạo đối tượng mới thay thế.

Nhưng tôi không thể tìm thấy phương thức createOrUpdate(). Tất cả các phương thức để làm việc với JSON. enter image description here

mã đầy đủ của tôi trông như thế này:

 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); 
     } 

Vì vậy, câu hỏi của tôi là, làm thế nào để cập nhật giá trị của đối tượng của tôi? Có cách nào để tăng giá trị của đối tượng của tôi không?

+1

Cố gắng quấn nó trong giao dịch. realm.executeTransaction (Realm.Transaction mới() {@Override public void thực hiện (Realm lĩnh vực) { KanjiComp TestObject = realm.createObject (KanjiComp.class); testObject.setValue (giá trị); realm.copyToRealmOrUpdate (testObject); } }); –

+0

Cảm ơn bạn, Maksim! –

Trả lời

15

tôi sẽ đi với một cái gì đó như thế này:

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(); 
} 
Các vấn đề liên quan