Android Room Копирование базы данных из ресурса не обновляется при обновлении версии - PullRequest
0 голосов
/ 13 февраля 2019

Я использую Android Room в приложении.У меня есть предварительная база данных в ресурсах, которые мне нужно использовать.Каждый раз, когда я обновляю версию, мне нужно заменить старую БД новой БД.Для этого я скопировал базу данных с обычным файлом ввода-вывода.

private fun copyDatabaseFile(context: Context) {
    val dbPath = context.getDatabasePath(DB_NAME)
    if (dbPath.exists() && AppPrefs.getInstance().dataBaseVersion== DATABASE_VERSION) {
        return
    }
    if(dbPath.delete())Log.e("datacopy", "file deleted")

    dbPath.parentFile.mkdirs()
    try {
        val inputStream = context.assets.open("databases/no_database.db")
        val output = FileOutputStream(dbPath)
        val buffer = ByteArray(8192)
        var length =0
        while ({length = inputStream.read(buffer, 0, 8192); length}() > 0) {
            Log.e("datacopy", "Write")
            output.write(buffer, 0, length)
        }
        output.flush()
        output.close()
        inputStream.close()
        AppPrefs.getInstance().dataBaseVersion= DATABASE_VERSION
    } catch (e: IOException) {
        e.printStackTrace()
    }
}
}

Вот геттер для экземпляра базы данных: -

 internal fun getDatabase(context: Context): MyDatabase? {
        if (INSTANCE == null) {
            synchronized(MyDatabase::class.java) {
                if (INSTANCE == null) {
                    copyDatabaseFile(context)
                    INSTANCE = Room.databaseBuilder(
                        context.applicationContext,
                        MyDatabase::class.java, DB_NAME)
                        .addMigrations(MyDatabase.MIGRATION_1_2)
                        .build()
                }
            }

        }
        return INSTANCE
    }

Миграция пуста, потому что мне нужно стеретьстарая копия новая.Так что я думаю, что миграция не требуется для этого.

@JvmField
    val MIGRATION_1_2: Migration = object : Migration(1, 2) {
        override fun migrate(database: SupportSQLiteDatabase) {


        }
    }

В первый раз все работает нормально.Когда я обновляю версию базы данных, я удаляю старый файл, копирую новый файл, но Room возвращает старые данные.Я не уверен, в чем проблема.

Я даже попробовал какой-то более старый ответ, который предлагает:

  1. Как использовать Room Persistence Library с предварительноЗаполненная база данных? библиотека с предварительно заполненной базой данных

  2. https://github.com/humazed/RoomAsset

Также пробовал некоторые другие вещи из Git, но ни один изэто сработало.В чем может быть проблема?Мне нужно заменить старую базу данных на новую каждый раз, когда обновляется версия базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...