AJJ*_*AJJ 6 java database android transactions realm
我很难让Realm工作.
RealmConfiguration realmConfig = new RealmConfiguration.Builder(this).build();
Realm.setDefaultConfiguration(realmConfig);
Realm realm = Realm.getDefaultInstance();
MyObjectExtendingRealmObject myObject = new MyObjectExtendingRealmObject("John");
realm.beginTransaction();
realm.copyToRealm(myObject);
realm.commitTransaction();
Run Code Online (Sandbox Code Playgroud)
错误:java.lang.IllegalStateException:只能从事务内部更改Realm数据
叫我疯了,但不是我在交易中做数据持久性,这究竟是如何在文档中完成的?请参阅copyToRealm
此处使用的示例:https://realm.io/docs/java/latest/#creating-objects
我究竟做错了什么?
编辑:什么,Realm不支持自动增加主键ID?对我来说是违规的.我会留下这个问题,以防它帮助其他人.
编辑:我的班级
public class MyObjectExtendingRealmObject extends RealmObject {
private String name;
public MyObjectExtendingRealmObject() {
}
public MyObjectExtendingRealmObject(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为有两个可能的原因:
1.)您实际上Realm.getDefaultInstance()
在多个地方调用,因此修改了一个实际上未设置在事务中的 Realm 实例
2.) 你的领域对象上没有默认的空构造函数
这是一些规范的用法示例:
。
Realm realm;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
realm = Realm.getDefaultInstance();
realm.executeTransactionAsync(new Realm.Transaction() {
public void execute(Realm realm) {
MyObjectExtendingRealmObject myObject = new MyObjectExtendingRealmObject("John");
realm.insertOrUpdate(myObject); // could be copyToRealmOrUpdate
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
if(realm != null) { // don't trust old devices
realm.close();
}
}
Run Code Online (Sandbox Code Playgroud)
。
Realm realm = null;
try {
realm = Realm.getDefaultInstance();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
MyObjectExtendingRealmObject myObject = new MyObjectExtendingRealmObject("John");
realm.insertOrUpdate(myObject); // could be copyToRealmOrUpdate
}
});
} finally {
if(realm != null) {
realm.close();
}
}
Run Code Online (Sandbox Code Playgroud)
领域模型:
public class MyObjectExtendingRealmObject extends RealmObject {
public MyObjectExtendingRealmObject() { // needed
}
public MyObjectExtendingRealmObject(String name) {
this.name = name;
}
@PrimaryKey
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3824 次 |
最近记录: |