Android Room.databaseBuilder (). CreateFromFile () молча - PullRequest
2 голосов
/ 30 апреля 2020

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

    // here goes code to .close() the app's db if isOpen()
    // val userChosenUri: Uri? = data?.data

    val outStream = getDatabasePath(DATABASE_NAME).outputStream()
    val inStream = userChosenUri.toString().let {
        userChosenUri?.let { it1 ->
            contentResolver.openInputStream(
                it1
            )
        }
    }

    inStream.use { input ->
        outStream.use { output ->
            if (output != null) {
                input?.copyTo(output)
            } 
        }
    }

Я пытаюсь заменить его на код, который я нашел в Android Руководстве по комнате:

    Room.databaseBuilder(this, AppDatabase::class.java, DATABASE_NAME)
        .createFromFile(File(userChosenUri!!.path))
        .build()

Но этот последний фрагмент, похоже, ничего не делает. Он не взламывает sh, но также не заменяет БД.

Кто-нибудь знает, что мне не хватает?

1 Ответ

1 голос
/ 30 апреля 2020

AFAIK, createFromFile() создает базу данных из файла, только если база данных еще не существует. Если вы хотите использовать это для сценария импорта или восстановления из резервной копии, я думаю, что вам нужно будет закрыть и удалить существующую базу данных, прежде чем пытаться использовать ваш последний фрагмент кода.

...