最近、SQLiteOpenHelper の使用に関連する問題に遭遇しました。再現できないエラーを報告したユーザーはほとんどいません。
android.database.sqlite.SQLiteDiskIOException: disk I/O error
at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1987)
at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1855)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:197)
私の実装は次のとおりです。
public class SqliteDatabase extends SQLiteOpenHelper
{
public SqliteDatabase(Context context, String dbName, int dbVersion)
{
super(context, dbName, null, dbVersion);
this.context = context;
this.dbName = dbName;
this.dbVersion = dbVersion;
}
(...)
}
ここでは特別なことは何もありません。例外は、getReadableDatabase() の呼び出し後にスローされ、スタックに表示されます。
このクラスは多くのスレッドによってアクセスされますが、アクセスは完全に同期されていることに注意してください (ロック + 1 つのみ、同じクラス インスタンス)。アプリケーションはSDカードに移動できます(おそらくそれが問題ですか?)。
残念ながら、問題が発生するデバイス/Android のバージョンはわかりません (プラットフォーム: Google Play コンソールのその他)。
何か案は?問題があまり一般的ではないことはわかっていますが、まだ解決策が見つかりません...