Я создаю базу данных в Android, используя этот код:SQLiteDiskIOException: ошибка ввода/вывода диска при создании базы данных
public class PackageDBHelper extends SQLiteOpenHelper{
//The Android's default system path of your application database.
private static String DB_PATH = "/data/data/com.myapp/databases/";
private static String DB_NAME = "my_db.db";
public SQLiteDatabase db;
private final Context myContext;
public PackageDBHelper(Context context) {
super(context, DB_NAME, null, 1);
this.myContext = context;
}
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
if(dbExist){
//do nothing - database already exist
}else{
//By calling this method and empty database will be created into the default system path
//of your application so we are gonna be able to overwrite that database with our database.
this.getReadableDatabase(); //error occurs here
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
StackTrace:
android.database.sqlite.SQLiteDiskIOException: disk I/O error
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1668)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1684)
at android.app.ActivityThread.access$1500(ActivityThread.java:124)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:948)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3717)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteDiskIOException: disk I/O error
at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1849)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:197)
at com.myapp.util.PackageDBHelper.createDataBase(PackageDBHelper.java:51)
Это приложение на рынке, и я получил несколько отчетов об ошибках. Я не смог дублировать его на любом из моих устройств, и ошибка относительно редка. Я понимаю, что DB_PATH следует, вероятно, извлечь из устройства, однако это не должно приводить к вызову getReadableDatabase().
Любые идеи?
У вас тоже была эта проблема? Это проблема на некоторых устройствах? Он работает для меня, как и на каждом устройстве, которое я тестировал. Просто хотел бы узнать, почему вы говорите, что делаете это до того, как я сменил приложение на производстве. – Patrick
У меня не было той же самой проблемы, кроме аналогичной. Для конструктора SQLiteOpenHelper требуется имя базы данных без расширения. – GAMA
k. Я попробую это в своем следующем обновлении, если это сработает, вы получите правильный ответ. благодаря – Patrick