2016-11-20 7 views
1

Я использую realm, и все выглядит хорошо, пока я не попытаюсь добавить исходные данные в свою базу данных.Добавление исходных данных в Realm Android

Я последовал примеру в этом 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/...

Есть ли что-то, что мне не хватает?

Заранее спасибо.

ответ

7

Удалить realm.beginTransaction(), realm.commitTransaction() и realm.close() calls. 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()); 
       } 
      } 
     } 
+0

Спасибо большое, это работает :) – developer033

Смежные вопросы