【问题标题】:Why initialData() Realm is never called when setting up configuration?为什么在设置配置时从不调用 initialData() Realm?
【发布时间】:2019-02-24 22:12:15
【问题描述】:

首先,我想问你,如果你认为这个问题值得 -1,请诚实并解释原因。

这是Application类的代码:

class WeatherApp: Application() {
    override fun onCreate() {
        super.onCreate()    
        Realm.init(this)
        Realm.setDefaultConfiguration(
            RealmConfiguration.Builder()
                .deleteRealmIfMigrationNeeded()
                .initialData(DatabaseInitTransaction(applicationContext))
                .build()
        )

    }
}

这是事务类:

class DatabaseInitTransaction(private val applicationContext: Context): Realm.Transaction {

    override fun execute(realm: Realm) {
        Log.d("DatabaseInitTransaction", "execute called.")
        val cityDao = CityDao(realm)
        realm.deleteAll()
        var stream :InputStream? = null
        try {
            stream = applicationContext.assets.open("city.list.json")
            cityDao.createAllFromJson(CityEntity::class.java, stream)
        } catch (thr: Throwable) {

        } finally {
            stream?.close()
        }
    }
}

因此,在DatabaseInitTransaction 类的冷启动方法execute() 上永远不会被调用。我不知道为什么,请帮忙!

【问题讨论】:

  • 你有没有在这段代码之后调用getDefaultInstance()?
  • initialData() 只会在磁盘上尚不存在 Realm 文件时运行。也许您应该先在测试设备上清除应用程序数据?

标签: kotlin realm


【解决方案1】:

您必须首先检查您的自定义应用程序类名称是否写入清单文件。

<Application>

带有类名的标签

【讨论】:

  • 我做到了。那是我创建该类后的下一件事。
  • 你添加了 .getInstance(config) 行吗?
猜你喜欢
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 2020-07-26
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多