在Realm Android中添加初始数据

时间:2016-11-20 20:45:39

标签: java android 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:Realm已经在/ path /...中写入事务。

有什么东西我不见了吗?

提前致谢。

1 个答案:

答案 0 :(得分:7)

删除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());
                }
            }
        }