2016-03-24 11 views
0

Basit bir Realm nesnesini başlatmaya çalışırken bazı garip davranışlar yaşıyorum. Bunun gibi görünen bir JSONArray vardır:Initialize Realm nesnesi @PrimaryKey 0 (sıfır) ikinci nesne üzerinde başarısız olur

[{"id":0,"name":"Biatrix"},{"id":1,"name":"Bill"},{"id":2,"name":"O-ren"}] 

Aşağıdaki basit Diyar sınıf var:

val assassins = viperData.getJSONArray("assassins") 

for (i in 0..(assassins.length() - 1)) { 
    val item = assassins.getJSONObject(i) 

    var assassin = realm.createObject(Assassin::class.java) 
    assassin.setId(item.getInt("id")) 
    assassin.setName(item.getString("name")) 
} 
:

İşte
import io.realm.RealmObject; 
import io.realm.annotations.PrimaryKey; 
import io.realm.annotations.Required; 

public class Assassin extends RealmObject { 
    @PrimaryKey 
    private int id; 

    @Required 
    private String name; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

I (KOTLIN cinsinden) Sınıfı doldurmak deneyin nasıl

Kimlik = 0 olan ilk öğe, iyi oluşturulur, ancak ikinci öğede bir özel durum io.realm.exceptions.RealmPrimaryKeyConstraintException: Value already exists: 0 olsun. Sonra düşündüm ki, nesne yaratıldı pr. default = id = 0 ve sadece afterwords ile değeri başka bir şeye değiştiriyorum.

... 
public class Assassin extends RealmObject { 
    @PrimaryKey 
    private int id = -1; 
... 

... ama hala aynı durum almak: o allready yüzden = id set -1 sınıfta değeri 0. olan bir öğeyi vardır çünkü başarısız oluyor.

Bu bir hata mıdır yoksa burada bir şey mi eksik?

Güncelleme Ben @PrimaryKey ek açıklama ve doğru olarak doldurulmuş sınıf kaldırıldı.

enter image description here

cevap

1

bölge belgelerden;:

- (burada hiçbir suikastçılar ... gerçek değerleri) Hemen değerleri burada değerlerini içeren bölge sınıfının bir vurulur, benzersiz olduğunu göstermek Realm.createObject() öğesini çağırırken, tüm alanlar varsayılan değere ayarlanmış yeni bir nesne döndürecektir. Bu durumda, birincil anahtar alanı varsayılan değer olan mevcut bir nesne ile çakışma olabilir. Bundan kaçınmak için bağımsız bir nesne oluşturmanın, alanların değerlerini ayarlamasının ve daha sonra copyToRealm() yöntemiyle Realm'ye kopyalamanız önerilir.

+0

Ne dediğinizi anlıyorum, ancak sorun bu değil. Buradaki sorun, teslim ettiğim "id" değerleri açıkça benzersiz olduğunda, başlatma başarısız oluyor? – Ambran

+0

Eğer başarısız olursa, o zaman benzersiz değildirler. – Wukash

+0

VEYA Gönderiimde önerdiğim gibi bir hata olabilir, çünkü emin olmak için değerleri birkaç kez kontrol ettim ve şüphesiz benzersizler. Güncellemeye bakın. – Ambran

İlgili konular