У меня довольно много клиентов, получающих исключение, упомянутое в заголовке, но я не могу воспроизвести его ни на одном из моих устройств.Android Sqlite SQLiteDiskIOException: ошибка ввода-вывода диска (код 1290) SQLITE_IOERR_DIR_FSYNC
Отчеты об ошибках показывают, что ошибка происходит только на устройствах Sony, но я не могу найти никаких сообщений о том, что Sony делает что-то смешное с их базами данных на Android.
код, который вызывает это исключение окончание сделки
db.beginTransaction();
for(some iterator)
db.execSQL("UPDATE table SET column = " + value + " WHERE other_column = " + something);
db.setTransactionSuccessful();
db.endTransaction();
StackTrace отсюда:
android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 1290)
at android.database.sqlite.SQLiteConnection.nativeExecute(Native Method)
at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:559)
at android.database.sqlite.SQLiteSession.endTransactionUnchecked(SQLiteSession.java:437)
at android.database.sqlite.SQLiteSession.endTransaction(SQLiteSession.java:401)
at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:530)
база данных находится на внешнем накопителе (но по желанию заказчика сообщает, что происходит, когда внешнее хранилище):
SQLiteDatabase db = SQLiteDatabase.openDatabase("/path/to/sqlite", null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
Просьба не быть слишком суровый в отношении кода, я знаю, что (например) должен быть try/catch вокруг операторов sql с окончанием endTransaction, но в этом случае это не имеет значения (и я не получаю ресурсы для очистки это наследие в настоящий момент).
Я нашел некоторые старые отчеты о SQLITE_IOERR_DIR_FSYNC на AIX, где FSYNC() в каталогах не был поддержан, но это не помогает мне, так как я, очевидно, не могу recomplie SQLite с правильными флагами компилятора на Android ...
Любые идеи?
Вы пытались воспроизвести ошибку на том же устройстве sony в конце, на котором клиент сообщил об ошибке? –
Нет, к сожалению, у меня нет доступа к любому устройству Sony, и я не могу воспроизвести его на любом из устройств, на которых я могу протестировать (Samsung Galaxy 1 & 2, Nexus S, Nexus 4, несколько планшетов Samsung и 7 "Kindle Fire HD), на самом деле ошибка не произошла ни разу для меня ... – Pontomedon
Хорошо, я могу получить руки на устройстве SE, если вы перешлите мне свой APK, я могу попробовать ... –