Androidは、アプリの更新とデータベースの変更を処理します
-
30-09-2019 - |
質問
基本的に、デバイスのユーザーデータ領域にコピーするSQLiteデータベースを使用するAndroidアプリの開発を完了しました。
Marketplaceアプリの更新手順がどのように行われるかはわかりませんが、どのようにテストできるかについても確信がありません。
現在、データベースがデバイスに存在するかどうかを確認し、そうでない場合はコピーします(通常、最初の起動時にのみ発生します)。更新されたアプリに新しいバージョンのデータベースがある場合はどうなりますか? Marketplaceの更新により、ユーザーデータが消去され、新しいデータベースが次の起動時にコピーされますか?
データベースの変更/レコード/などを追加して、新しいアプリでこれをパッケージ化すると、将来どうなりますか?このデータベースは古いデータベースを上書きしませんか?
それ以外の場合は、起動するたびにアプリバンドルからデータベースをコピーしてオーバーライドすることを避けるために、データベースファイルのサイズと日付を確認し、バンドル内のデータベースがより新しい場合にのみコピーする方法がありますか?
誰かが明確にする必要がある場合は、尋ねてください。
解決
私は似たようなことをしています。私がしたことはデータベースバージョンを設定することです。そして、データベースが存在するかどうかを確認すると、正しいバージョンであることを確認します。そうでない場合は、データベースからユーザーのお気に入りを保存し、DBを拭き取り、ユーザーのお気に入りを元に戻します。
これは私のアップグレードです
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion == 2) {
System.out.println("Performing upgrade!");
openDataBase();
// save the old favorites
Cursor mCursor = getFavorites();
ArrayList<Stop> favs = allCursorToStops(mCursor);
mCursor.close();
deleteRecreate(db);
openDataBase();
for (int i = 0; i < favs.size(); i++)
setFavorite(favs.get(i));
close();
} else {
deleteRecreate(db);
}
}
これが私が存在をチェックする場所です/アップグレードする必要があるかどうか
boolean dbExist = checkDataBase();
if(dbExist){
// check if we need to upgrade
openDataBase();
int cVersion = myDataBase.getVersion();
close();
if(cVersion != VERSION)
onUpgrade(myDataBase, myDataBase.getVersion(), VERSION);
所属していません StackOverflow