2016-11-30 2 views
0

私は自分のプロジェクトでレルムDBを使用します。私は、アプリケーションのlauchを最初に見たときにJSONの資産を自分の資産フォルダに領域に書きたいと思っています。私はコトリンを使用します。レルムexecuteTransactionAsyncデータベースにデータを書き込まない

val realm = Realm.getDefaultInstance() 
realm.executeTransactionAsync { 
    realm.copyToRealm(skillsList) 
} 
realm.close() 

しかし、私のレルムdbが空である:私は私のデシベルにList<Data>を非同期書きたいたより

Realm.init(this) 
    val config = RealmConfiguration.Builder() 
      .rxFactory(RealmObservableFactory()) 
      .build() 
    Realm.setDefaultConfiguration(config) 

: は、私は私の領域を初期化。 realm.copyToRealm(skillsList)の後に私は空のテーブルを持っています。なにが問題ですか?私はStetho、本当に空のテーブルをチェックします。どのように私はそれを修正することができます?

+0

は、UIスレッド上で、このですか? onsuccess/onerrorコールバックの領域を閉じても問題ないかどうかチェックしましたか? – EpicPandaForce

+0

アプリケーションクラスのonCreate。 Log.dをCallBacks(onSuccess、onError)に置きます。しかし、Logcatは明らかです。 – MediaPortal

+0

AndroidManifest.xmlにカスタムアプリケーションクラスを追加してもよろしいですか? – EpicPandaForce

答えて

-1

私はエラーが発生しました:

Realm objects can only be accessed on the thread they were created 

私はそれを修正:

Thread({ 
     Realm.getDefaultInstance().use { 
       val skillsList = ArrayList<Skill>() 
       val inputSkills = assets.open("skills.json") 
       val size = inputSkills.available() 
       val buffer = ByteArray(size) 
       inputSkills.read(buffer) 
       inputSkills.close() 
       val json: JSONObject = JSONObject(String(buffer)) 
       val skillsArray = json.getJSONArray("skills") 
       (0..skillsArray.length() - 1) 
         .map { skillsArray.getJSONObject(it) } 
         .forEach { skillsList.add(Skill(skillsList.size.toLong(), it.getString("title"), it.getString("subtitle"), it.getInt("rating"))) } 
       it.beginTransaction() 
       it.copyToRealm(skillsList) 
       it.commitTransaction() 
      Log.d("REALM","LOOOOG") 
     } 
    }).start() 
関連する問題