У меня есть приложение, которое позволяет пользователю сохранять файлы базы данных приложения SQLite на SD-карту.Эта функция существует уже более года и работает просто отлично.У меня были пользователи, присылавшие мне по электронной почте свои файлы базы данных в тех случаях, когда произошла ошибка, которую я не мог воспроизвести.
Недавно пользователь отправил мне файлы своей базы данных, и когда я попытался загрузить их в свое приложение (поместив их в расположение файла базы данных приложения), приложение упало при попытке открыть файл базы данных.Этот пользователь ранее отправлял мне свои файлы без проблем.
Единственные различия между моим приложением тогда и сейчас: 1) я добавил функциональность app-2-SD, и 2) мои цели приложения2.2 сейчас против 1.6 тогда (но 1.5 является минимальной версией SDK в обоих случаях).
Пользователь сказал, что он поместил приложение на SD-карту, а затем приложение начало падать.Это даже не дает ему возможность отправить сообщение об ошибке.
Когда я поместил его файлы в эмулятор, я получил следующую трассировку стека:
11-09 22:32:04.275: ERROR/AndroidRuntime(757): Caused by: android.database.sqlite.SQLiteException: file is encrypted or is not a database
11-09 22:32:04.275: ERROR/AndroidRuntime(757): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
11-09 22:32:04.275: ERROR/AndroidRuntime(757): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1636)
11-09 22:32:04.275: ERROR/AndroidRuntime(757): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1586)
11-09 22:32:04.275: ERROR/AndroidRuntime(757): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:638)
11-09 22:32:04.275: ERROR/AndroidRuntime(757): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:168)
Он послал мне по электронной почтеданные раньше, и файлы имели правильное имя базы данных и расширение, поэтому я даю ему преимущество сомнения и не предполагаю, что он отправил неправильный файл.Кто-нибудь видел эту проблему раньше и знает о возможных причинах и / или решениях?
Обновление В случае какой-либо разницы я узнал от пользователя, что его телефон - HTCЭво 4G.Я думал, что где-то читал о зашифрованных файлах базы данных в более поздних выпусках Android, где файлы базы данных хранятся в / data / secure / ... вместо / data / data / ... Интересно, может ли это быть связано?В любом случае, после дальнейшего опроса пользователя, я, по крайней мере, знаю, что это одна конкретная таблица в файле базы данных, которая имеет проблему.Различные части моего приложения взаимодействуют с различными таблицами в файле базы данных.Приложение работает нормально и позволяет ему сохранять / читать данные, когда он обращается к другим таблицам, но когда он обращается к одной конкретной таблице, просто попытка открыть файл приводит к его ошибке.Я думаю, что могу добавить некрасивое исправление, которое перехватывает это исключение, если оно возникает, а затем удаляет поврежденную таблицу и затем воссоздает ее.Мысли?