我正在使用 Realm ,在我尝试将初始数据添加到我的数据库之前,一切看起来都很好。
我遵循了这个 answer 中的例子,所以在我的类中,它继承自 Application
,我有以下内容:
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
final Map<String, String> map = new LinkedHashMap();
map.put("Key1", "value1");
map.put("Key2", "value2");
RealmConfiguration config = new RealmConfiguration.Builder().initialData(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
int i = 1;
for (Map.Entry entry : map.entrySet()) {
realm.beginTransaction();
Category c = realm.createObject(Category.class, i++);
c.setName((String) entry.getKey());
c.setDescription("Category #" + entry.getValue());
realm.commitTransaction();
}
realm.close();
}
}).deleteRealmIfMigrationNeeded().name("realm.db").build();
Realm.setDefaultConfiguration(config);
}
}
我认为此配置应该有效,但我收到以下错误:
java.lang.IllegalStateException: The Realm is already in a write transaction in /path/...
有什么我想念的吗?
提前致谢。
最佳答案
删除 realm.beginTransaction()
、realm.commitTransaction()
和 realm.close()
调用。 public void execute(Realm realm)
是 Realm.Transaction
类的一个方法,它将为您处理启动和提交事务:
RealmConfiguration config = new RealmConfiguration.Builder().initialData(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
int i = 1;
for (Map.Entry entry : map.entrySet()) {
Category c = realm.createObject(Category.class, i++);
c.setName((String) entry.getKey());
c.setDescription("Category #" + entry.getValue());
}
}
}
关于java - 在 Realm Android 中添加初始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40709188/