私はこのコードを使用しています
public class PeopleDBHelper extends SQLiteOpenHelper {
public static final String TABLE_NAME = "Person";
public static final String DB_PATH = "/data/data/com.machinarius.labs.preloadedsql/databases/";
public static final String DB_NAME = "preload-test.sqlite";
private static final String DB_PREFS = "whyDoIHaveToDoThisAgain?";
private Context parent;
public PeopleDBHelper(Context context) {
super(context, DB_NAME, null, 1);
parent = context;
SharedPreferences prefs = context.getSharedPreferences(DB_PREFS, 0);
if(prefs.getBoolean("firstRun", true)) {
prefs.edit().putBoolean("firstRun", false).commit();
onCreate(null);
}
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
Log.i(getClass().getSimpleName(), "onCreate()");
InputStream source;
OutputStream destination;
byte[] buffer;
try {
source = parent.getAssets().open(DB_NAME);
destination = new BufferedOutputStream(new FileOutputStream(DB_PATH + DB_NAME));
buffer = new byte[512];
while(source.read(buffer) > 0) {
destination.write(buffer);
}
source.close();
destination.flush();
destination.close();
} catch(IOException ex) {
Log.e(getClass().getSimpleName(), "IOException", ex);
}
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) {
}
}
そして、私は疑問に思っていました... onCreate を起動するために、SharedPreferences でそのばかげたハックを実装する必要があるのはなぜですか? [設定] メニューからアプリケーション データをワイプし、getWritableDatabase() onCreate を呼び出した後でも、永続化レイヤーからのクラッシュが発生していました。私は何を間違えましたか?