10

私は、アセット フォルダー内のアプリに同梱されている xml によって入力されるデータの SQLite に依存するアプリを持っています。

  1. 初めてアプリを実行すると、共有設定 config_run = false が設定されます。
  2. 次に、config_run = false かどうかを確認してから、xml を解析し、データを db にダンプします
  3. config_run = true に設定

Google Play で更新をプッシュし、XML にさらにコンテンツを追加する必要がある場合に気付きました。データベースのバージョンを 1 から 2 に変更しても、共有設定の config_run 値が true に設定されるため、インポート スクリプトは実行されません。

この状況を処理する方法についての指針はありますか?

シナリオ

  1. 最初のインストール - Ver = 1、DB V = 1 (データは解析され、データベースにダンプされます)
  2. バグは修正され、プッシュおよび更新されましたが、データは変更されていません - ver = 1.1、DB V = 1 (コードを置き換えるだけで、データベースをアップグレードまたは再作成する必要はありません)
  3. データをアップグレードし、新しいアップデートをプッシュ - ver 1.2、DB = 2 (新しいコードはありませんが、データを再作成する必要があります)

私のアプリの流れ

  1. アプリがスプラッシュ アクティビティを開始します。Shared Pref - config_run が false に等しい場合、進行状況ダイアログが開始され、データが解析されてデータベースにダンプされます。
  2. DB を解析して作成し、データをダンプすると、MainActivity に移動します。

2 番目のケース

  1. SplashActivity が実行され、config_run = true になるため、メイン アクティビティに直接移動します。

以下の少数の人々が示唆しているように、SQLiteHelper の onUpgrade でデータをデータベースにダンプしようとすると、SplashActivity で Db 接続を開かず、ダイアログの進行状況も表示されないため、MAinActivity でのみ発生します。

4

5 に答える 5

8

最後にスクリプトを実行したバージョン番号の共有設定を追加します。アプリの起動時に現在の apk バージョンを確認し、新しい場合はスクリプトを再度実行して設定を更新します。

于 2013-01-16T15:34:39.093 に答える
7

組み込みの sqlite バージョン管理システムを使用したくないのはなぜですか。DB のバージョンは、アプリのバージョンから独立しています。そして、それはまさにあなたが望むことをします。SQLiteOpenHelper ? データベースのバージョンを変更するたびに onUpgrate コールバックが呼び出され、データベースを補充できます。多くの例があります。

于 2013-01-19T18:27:47.103 に答える
4

xmlfiles を更新日で終わらせ、最後に更新した日付を sharedpref に保存します。

起動時に更新の検索を (最適化された方法で) 確認できます。前回と比較して新しい日付の新しいファイルが見つかった場合は、ファイルをダンプする必要があることがわかります。

トータルハックジョブ:D

于 2013-01-20T09:12:48.967 に答える
4

共有設定 (config_run) を false に設定して true にする代わりに、データベースのバージョンを設定するだけです。アプリを更新するときは、共有設定に同じバージョン番号があるかどうかを確認してください。以下に示すように、これを行うことができます。

configRun = settings.getInt("database_version", 0);

if ((DBAdapter.DATABASE_VERSION) == configRun) 
{
//skip xml parsing
}
else
{
//first time configRun will be "0" and DBAdapter.DATABASE_VERSION will be 1
// so you need to parse your xml here and set configRun =1
//on update, change your DB version to 2. now again your configRun and DBAdapter.DATABASE_VERSION will mismatch and you can parse your xml.
}
于 2013-01-24T12:43:24.433 に答える
3

あなたができる2つのこと:

  1. 正しい方法: データベース プロバイダーの onUpdate() をオーバーライドして、ファイルをインポートします。(上で提案したように)

  2. 1 行のチェンジャー: key="config_run" をチェックする代わりに、key=("config_run"+DB_VERSION) をチェックして設定し、インポートが必要かどうかを確認します。もちろん、キーが存在しない場合は、返す必要があります。間違い。このように、DB 番号を更新するたびに、インポート ジョブが再度実行されます。

これは、アプリのバージョンに依存しません。

于 2013-01-23T20:45:32.543 に答える