Android One Plus Two: не удалось изменить локаль для БД

Я использую базу данных 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'.

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

Я видел другие подобные вопросы здесь, я пробовал почти все ответы, но ничего не работает. Я пробовал это и это .

EDIT: Устройство работает на Oxygen Lollipop.


person Ramaraj T    schedule 23.12.2015    source источник
comment
Модель устройства не говорит нам о выделении, прошивке, ПЗУ и т. Д. Это намного полезнее, поскольку устройства OnePlus обычно имеют множество различных конфигураций.   -  person Rolf ツ    schedule 23.12.2015
comment
Этот путь /data/data/com.zanec.dryjanuary/databases/alcochange.sqlite/может не существовать. Отметьте context.getDatabasePath(/data/data/com.zanec.dryjanuary/databases/alcochange.sqlite/), которые возвращают тип File.   -  person Madhukar Hebbar    schedule 04.01.2016
comment
У вас есть строка E/SQLiteDatabase(6278): Caused by: ??? в крашлоге?   -  person naXa    schedule 04.01.2016
comment
@MadhukarHebbar Я проверил это, все в порядке. Это происходит только в мобильном телефоне One Plus Two, на других он работает нормально.   -  person Ramaraj T    schedule 04.01.2016
comment
@naXa да, есть. Вызвано: android.database.sqlite.SQLiteDatabaseCorruptException: образ диска базы данных искажен (код 11).   -  person Ramaraj T    schedule 04.01.2016
comment
Нашли ли вы какое-либо решение конкретной проблемы?   -  person chossen-addict    schedule 04.02.2016
comment
@chossen-addict Причину не нашел, но как-то избежал. Пожалуйста, посмотрите мой ответ ниже   -  person Ramaraj T    schedule 04.02.2016


Ответы (2)


Я не могу найти причину, по которой у меня возникает эта ошибка, но каким-то образом я избежал этого, выполнив следующие действия.

Раньше у меня была база данных .sqlite в комплекте, и когда пользователь впервые открывал наше приложение, я копировал базу данных .sqlite из пакета по правильному пути.

Но теперь я экспортировал необработанные запросы из .sqlite и добавил их в пакет в виде txt-файла. Теперь, когда пользователь открывает приложение в первый раз, я сначала создам пустой файл .sqlite в пути, а затем прочитаю все запросы .sql из файла txt из пакета и выполню их над файлом .sqlite в папке. дорожка.

person Ramaraj T    schedule 04.02.2016

Попробуйте сменить локаль вручную.

Откройте файл базы данных с помощью редактора SQLite, например SQLiteStudio, затем откройте android_metadata таблицу. если он не существует, создайте его. (вы можете создать его с помощью редактора запросов (инструменты > открыть редактор запросов) и скопировать/вставить код DDL ниже)

CREATE TABLE android_metadata ( 
    locale TEXT 
);

для вставки записи вы можете скопировать/вставить эту строку в редакторе запросов:

INSERT INTO android_metadata VALUES ('en_us');

Подсказка: для запуска запроса в SQLiteStudio необходимо нажать кнопку со значком lightningна панели инструментов.

person naXa    schedule 04.01.2016