2

似たような質問がたくさんあることは承知しており、繰り返さないことを願っていますが、別のことを試しましたが、まだ問題を解決できません。SQLite を使用して一部のデータを内部に保存する Android アプリを開発しています。私は自分の携帯電話でこのアプリを 1 か月使用しており、失いたくないデータを大量に追加しましたが、同時にコンピューターのアプリを改善しましたが、改善によりいくつかの列名が変更されました、いくつかの列とテーブルを追加します。だから、今私は私の電話でアプリを更新したいと思います。

以前のバージョンではデータベースが 2 に設定され、新しいバージョンでは 3 に設定されていました。さらに、私のアプリには、ファイルを SD カードにコピーするだけでデータベースのバックアップを作成する機能と、内部データベース ファイルを置き換えることで復元する機能があります。ユーザーがSDカードから選択したもの。問題は、電話からデータベースのバックアップを作成し、それをコンピューターに移動して、エミュレーターで実行されているアプリの新しいバージョンにインポートして、アプリをインストールする前に期待どおりにデータベースをアップグレードできるようにしたことです。私の電話の新しいバージョン。問題は、SQLiteOpenHelper の onUpgrade が呼び出されないことです。さまざまな試行を行いましたが、何も機能していません。携帯電話のデータベースにバージョン 2 があることを確認でき (sqliteadmin "PRAGMA user_version;" SQL クエリと回答 2 を使用)、アプリはバージョン 3 を探します。

バックアップをインポートするときに実行されるコードを次に示します。

private boolean importDatabase(String path) {  
    String dbPath = mDbHelper.getDbPath();  
    mDbHelper.close();  

    boolean result = copyFile(path, dbPath);  

    if (result) {  
        mDbHelper = new DbHelper(this);  
        mDbHelper.getWritableDatabase().close();  
    }  
    return result;  
}  

ユーザーが新しいバージョンでデータベースをインポート/エクスポートする場所に到達すると、アプリが状態アクティビティからアクティブなデータベースを必要とするため、バージョン 3 の新しい空のデータベースが作成されたことにも言及する必要があります。次に、インポート時に、この空のデータベース ファイルがインポートされたファイルに置き換えられます。キャッシュされたデータを消去するのに欠落しているのだろうか。

このシナリオで onUpgrade が呼び出されない理由を理解する手がかりを教えてください。

4

0 に答える 0