【问题标题】:Realm executeTransactionAsync dont write data to DB领域 executeTransaction Async 不要将数据写入数据库
【发布时间】:2016-11-30 15:19:29
【问题描述】:

我在我的项目中使用领域数据库。我想在应用程序第一次启动时将一些数据从我的资产文件夹中的 JSON 写入领域。我使用科特林。 我初始化我的领域:

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

比我想要异步写入 List<Data> 到我的数据库:

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

但是我的领域数据库是空的。在realm.copyToRealm(skillsList) 之后我有空桌子。怎么了?我用 Stetho 检查桌子,它真的是空的。我该如何解决?

【问题讨论】:

  • 这是在 UI 线程上吗?您是否检查过在 onsuccess/onerror 回调中关闭领域是否有效?
  • Application 类的 onCreate。我把 Log.d 放到 CallBacks(onSuccess, onError) 中。但是Logcat很清楚。
  • 您确定将自定义应用程序类添加到AndroidManifest.xml

标签: android database realm kotlin


【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    相关资源
    最近更新 更多