尝试初始化一个简单的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>
注释并正确填充了类。只是为了表明这些值是唯一的,这里是一个包含值的领域类的镜头(实际值 - 这里没有刺客......):
答案 0 :(得分:1)
来自领域文档:
调用Realm.createObject()时,它将返回一个新对象,其中所有字段都设置为默认值。在这种情况下,可能与主键字段为默认值的现有对象发生冲突。为避免这种情况,建议创建独立对象,设置字段值,然后通过copyToRealm()方法将其复制到Realm。