Я столкнулся с подобной проблемой.Я копировал базу данных, но не из ресурса.Я обнаружил, что проблема не имеет никакого отношения к коду моего файла базы данных.И при этом это не имело отношения к файлам, оставленным открытым, не закрытым, очищением или синхронизацией.Мой код обычно перезаписывает существующую неоткрытую базу данных.То, что кажется новым / отличным от Android Pie и отличается от предыдущих выпусков Android, заключается в том, что когда Android Pie создает базу данных SQLite, он устанавливает значение journal_mode в WAL (запись в журнал с опережением записи) по умолчанию.Я никогда не использовал режим WAL, и в документации по SQLite сказано, что journal_mode должен быть по умолчанию DELETE.Проблема заключается в том, что если я перезаписываю существующий файл базы данных, назовем его my.db, журнал предварительной записи my.db-wal все еще существует и эффективно «переопределяет» то, что находится в недавно скопированном файле my.db.Когда я открывал свою базу данных, таблица sqlite_master обычно содержала только строку для android_metadata.Все таблицы, которые я ожидал, отсутствовали.Мое решение состоит в том, чтобы просто установить journal_mode обратно на DELETE после открытия базы данных, особенно при создании новой базы данных с Android Pie.
PRAGMA journal_mode = DELETE;
Возможно, WAL лучше, и, возможно, некоторыеспособ закрыть базу данных, чтобы не мешать записи с опережением записи, но мне действительно не нужен WAL и он не нужен для всех предыдущих версий Android.