Android One Plus Two: не удалось изменить локаль для db
Я использую базу данных Sqlite в одном из моих проектов Android. Он отлично работает на всех устройствах, кроме One Plus Two.
Я получаю исключение при попытке открыть базу данных. Это крашлог.
12-23 19:14:35.235: E/SQLiteLog(3133): (11) database corruption at line 53216 of [9491ba7d73]
12-23 19:14:35.235: E/SQLiteLog(3133): (11) statement aborts at 7: [SELECT locale FROM android_metadata UNION SELECT NULL ORDER BY locale DESC LIMIT 1]
12-23 19:14:35.237: E/SQLiteDatabase(3133): Failed to open database '/data/data/com.mycompany.myapp/databases/alcochange.sqlite'.
12-23 19:14:35.237: E/SQLiteDatabase(3133): android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.mycompany.myapp/databases/myapp.sqlite' to 'en_US'.
Пожалуйста, нажмите здесь, чтобы увидеть полный журнал сбоев
Я видел здесь и другие подобные вопросы, пробовал почти все ответы, но ничего не получается. Я пробовал это и это.
РЕДАКТИРОВАТЬ: устройство работает на кислородный леденец.
Ответы
Ответ 1
Я не могу найти причину, по которой у меня возникает эта ошибка, но почему-то я избегал этого, выполняя следующие действия.
Раньше у меня была база данных .sqlite в пакете, и когда пользователь впервые открыл наше приложение, я скопировал базу данных .sqlite из пакета в правильный путь.
Но теперь я экспортировал необработанные запросы из .sqlite и добавил его с пакетом в виде txt файла. Теперь, когда пользователь впервые открывает приложение, я сначала создаю пустой файл .sqlite в пути, а затем я прочитал все запросы .sql из файла txt из пакета и выполнил их по файлу .sqlite в путь.
Ответ 2
Попробуйте вручную изменить локаль.
Откройте файл базы данных с помощью редактора SQLite, такого как SQLiteStudio, затем откройте таблицу android_metadata
. если он не существует, создайте его. (вы можете создать его с помощью редактора запросов (инструменты > открыть редактор запросов) и скопировать/вставить DDL-код ниже)
CREATE TABLE android_metadata (
locale TEXT
);
для вставки записи вы можете скопировать/вставить эту строку в редакторе запросов:
INSERT INTO android_metadata VALUES ('en_us');
Подсказка: для запуска запроса в SQLiteStudio вы должны нажать кнопку с иконкой
на панели инструментов.