使用@PrimaryKey初始化Realm对象0(零)在第二个对象上失败

时间:2016-03-24 22:08:04

标签: java android realm

尝试初始化一个简单的Realm对象时,我遇到了一些奇怪的行为。我有一个类似的JSONArray:

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

我有以下简单的Realm类:

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

以下是我尝试填充课程的方法(在Kotlin中):

io.realm.exceptions.RealmPrimaryKeyConstraintException: Value already exists: 0

创建了id = 0的第一个项目,但是在第二个项目中我获得了异常... public class Assassin extends RealmObject { @PrimaryKey private int id = -1; ... 。然后我想哦,你的对象是pr。默认值为id = 0且仅在我之后将值更改为其他值。它失败了,因为它已经有一个值为0的项目。所以我在类中设置了id = -1:

@PrimaryKey

...但仍然得到同样的例外。

这是一个错误还是我错过了什么?

更新

我删除了<input type="text" placeholder="upload" class="card" id="upload"> <br> <div class="enter" id="submit-upload">upload</div> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"> </form> 注释并正确填充了类。只是为了表明这些值是唯一的,这里是一个包含值的领域类的镜头(实际值 - 这里没有刺客......):

Documentation about @pyqtslot

1 个答案:

答案 0 :(得分:1)

来自领域文档:

调用Realm.createObject()时,它将返回一个新对象,其中所有字段都设置为默认值。在这种情况下,可能与主键字段为默认值的现有对象发生冲突。为避免这种情况,建议创建独立对象,设置字段值,然后通过copyToRealm()方法将其复制到Realm。