2017-02-04 7 views
0

リストをループしてすべてのオブジェクトをRealmに追加すると、RecyclerViewには1つのイメージしか表示されないため、次の各オブジェクトが上書きされます。今のレルム主キー制約例外:値はすでに存在します

私は3例を持っている:copyToRealmOrUpdate()毎回の呼び出し

  • は、保存されたオブジェクトを上書きします。
  • @PrimaryKeyと設定してinsert()に電話するとRealmPrimaryKeyConstraintException: Value already exists: nullが投げられます。
  • @PrimaryKey注釈Realmを削除するとコピートが完了し、RecyclerViewは正常に写真を表示できますが、さらにすべてのオブジェクトが自分の複製を持っている可能性があります。ここで

私のクラスです:私は直接の保存方法私ImageModel.class

Handler handler = new Handler() { 
    @Override 
    public void dispatchMessage(Message msg) { 
     super.dispatchMessage(msg); 
     final List<Picture> list = (List<Picture>) msg.obj; 

     realm.executeTransaction(new Realm.Transaction() { 
      @Override 
      public void execute(Realm realm) { 
       for (Picture current : list) { 
        realm.copyToRealmOrUpdate(current); 
       } 
      } 
     }); 
    } 
}; 

でリストを反復

RealmObjectクラス

public class Picture extends RealmObject implements Serializable { 
    @PrimaryKey String picURL; 
    //getters/setters 
} 

ハンドラとレルムwへのすべてのオブジェクト重複していない?

+0

ハンドラ?何?どうして? – EpicPandaForce

+1

'RealmPrimaryKeyConstraintException:値は既に存在します:ヌル'次に 'copyToRealmOrUpdate()'を呼び出すと 'imgURL'フィールドが' null'です – EpicPandaForce

+0

答えがあなたを助けましたか? – OBX

答えて

1

@primaryKeyを保管してください。そして、ここにあなたのコードから、あなたは更新したい方法は次のとおりです。

realm.executeTransaction(new Realm.Transaction() { 
     @Override 
     public void execute(Realm realm) { 
      for (Picture current : list) { 
       Picture db = realm.where(Picture.class).equalTo("picURL",picURL).findFirst(); 
       db.setOtherMethod(true); 
       db.setAnotherMethod("hello"); 
      } 
     } 
    }); 

あなたが見ることができるように、キーが主キーのオブジェクトを検索し、それを編集することです。

関連する問題