2016-11-20 5 views
1

私はレルムを使用しています。データベースに初期データを追加しようとするまで、私はすべてよく見えます。Realm Androidに初期データを追加する

Applicationから継承私のクラスで、私は次のようしているので、私は、このanswerの例を踏襲:

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()コールを削除します。 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

関連する問題