2

onDowngrade()アプリ内の古いバージョンのデータベースがアプリの既存のバージョンを置き換えるたびに、 onDowngrade メソッドをオーバーライドする必要があります。

つまり、(新しいバージョンのデータベース) < (古いバージョンのデータベース) です。

例: データベース バージョン 3 で新しいアプリをインストールしようとすると、現在または既にインストールされているアプリがデータベース バージョン 2 に置き換えられ、この onDowngrade メソッドが呼び出されることはありません。

私の質問が非常に明確であることを願っています。この質問に答えて、この方法についてアイデアを出してください。

私の新しいバージョンのアプリ ソース コード:

public class MyDatabase extends SQLiteOpenHelper
    {
        private static final int DB_VERSION     =   10;

        public MyDatabase(Context context) 
        {
            super(context, DB_NAME, null, DB_VERSION);
        }
       @Override
       public void onCreate(SQLiteDatabase db) 
        {
            Log.d("Method","onCreate called");

                .....
                .....
                .....

        }
     @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        {
            Log.d("Method","onUpgrade called");
                 .....
                 .....
                 .....
        }
        public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
        Log.d("Method","onDowngrade called");
                 .....
                 .....
                 .....
        }

}

マニフェスト.xml

バージョンコード: 10

私の古いバージョンのアプリ ソース コード:

 public class MyDatabase extends SQLiteOpenHelper
    {
        private static final int DB_VERSION     =   9;

        public MyDatabase(Context context) 
        {
            super(context, DB_NAME, null, DB_VERSION);
        }
       @Override
       public void onCreate(SQLiteDatabase db) 
        {
            Log.d("Method","onCreate called");

                .....
                .....
                .....

        }
     @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        {
            Log.d("Method","onUpgrade called");
                 .....
                 .....
                 .....
        }
        public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
        Log.d("Method","onDowngrade called");
                 .....
                 .....
                 .....
        }

}

マニフェスト.xml

バージョンコード: 9

最後にもう一度、私のクエリは、新しいアプリを古いアプリ (上記の対応するソース コードを持つ) に置き換えたことです。

しかし、古いバージョンのアプリはonDowngrade().

4

2 に答える 2

2

この特定の質問に対する回答が見つかりました。

私の AndroidManifest.xml ファイルの minSdkVersion は以下のように 8 であり、onDowngrade() を呼び出すことはありません。

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="18" />

ただし、 onDowngrade メソッドは、以下のように minSdkVersion が 11 以上である必要がある場合にのみ呼び出されます。

解決:

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="18" />
于 2013-11-12T11:49:04.020 に答える
-1

オーバーライドする抽象メソッドではありません。

このメソッドを次のようにオーバーロードできます

public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {

   // what to do here

}

デフォルトでは、SQLiteException がスローされます。

DB バージョン変数を静的として宣言しました。そのため、再宣言しても更新されません。

DB を初期化する前に、ランチャー アクティビティのどこかで再初期化する必要があります。

また、マニフェストで最小バージョンを確認してください

<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="18" />
于 2013-11-11T10:37:12.767 に答える