6

最近、Android ゲームを更新し、sqlite データベースを編集してテーブルに新しいフィールドを追加しました。更新後、4 つのクラッシュ レポートを受け取りました (そのうちの 3 つは同じデバイス、Samsung Galaxy S4 からのものです)。

android.database.sqlite.SQLiteException: android.database.sqlite.SQLiteOpenHelper.onDowngrade(SQLiteOpenHelper.java:361) でバージョン 2 から 1 にデータベースをダウングレードできません android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java: 255) android.database.sqlite.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:164) で

最後のデータベースで実際にアップグレードする必要があるのに、データベースのダウングレードを開始することさえ可能である場合、その理由が何であるかを本当に理解できません。

更新中に、明らかに DATABASE_VERSION の値を 1 から 2 に増やしました

onDowngrade メソッドをオーバーライドしていません。私の onUpgrade は次のようになります。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
    updateToVersion2(db, oldVersion, newVersion);
}

private void updateToVersion2(SQLiteDatabase db, int oldVersion, int newVersion)
{
    if (oldVersion <= 1)
    {
        ContentValues cv1 = new ContentValues();
        cv1.put(FIELD_WORLD_ID, 6);
        cv1.put(FIELD_MAX_UNLOCKED, 1);
        db.insert(TABLE_LEVELS, null, cv1);
    }
}

ありがとうございました。

4

1 に答える 1

3

問題は、メソッドをオーバーライドしていないことですonDowngradejavadocで説明されているように、例外が発生する必要があります。

オーバーライドされていない場合、デフォルトの実装はダウングレードを拒否し、SQLiteException をスローします

于 2013-11-05T10:51:35.013 に答える