0

私はこのコードを使用しています

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 を呼び出した後でも、永続化レイヤーからのクラッシュが発生していました。私は何を間違えましたか?

4

0 に答える 0