1

2つのクエリがあります:

  1. WebサービスのデータをローカルのSQLiteDBに挿入したいと思います。このデータを一度だけ挿入したいのですが、次回はWebサービスから読み込まれません。静的変数を使用してみましたが、うまくいきませんでした。

    static int UpdateOneTime = 0;

    if(UpdateOneTime == 0){

    getData();

    UpdateOneTime ++;

    }

  2. データを再度リロードする場合は、アプリが起動するたびにサーバーからデータを取得し、テーブル内の前のデータを削除するだけでDBに挿入することを意味します。電話するだけで試してみましたが、onUpgrade(SqliteDatabase db, int oldversion,int newversion); うまくいきませんでした。では、これら2つの問題をどのように解決するか。私に何かを提案してください。

4

3 に答える 3

1

挿入された値または挿入されていない値を静的変数に保持しないでください。アプリケーションが開始されるたびに、値にはデフォルト値が設定されます。最初のデータ挿入後、設定で値を保存し、アプリの起動時に毎回確認できます

于 2013-02-06T13:50:47.503 に答える
1

1. については、データベースを作成する関数を @override する必要がonCreateあり、そこでいくつかのクエリを実行できます。この関数は、データベースを要求し、デバイスがまだデータベースが存在しないことに気付いた場合にのみ呼び出されます。

2番目。覚えていれば、手動で呼び出すことはできませんが、代わりに、データベースのバージョンをアップグレードするときに呼び出される関数です。これは、SQLiteOpenHelperクラスの構成によって管理されます。

注:onCreateとはどちらもonUpgrade、データではなく、データベースの作成時およびデータベース構造のアップグレード時に呼び出される関数です。

于 2013-02-06T13:50:57.423 に答える
0

ポイント1について:マルコの答えに従うことができます。

しかし、もし私があなたなら、フラグのデフォルト値を持つ構成テーブルを作成し、それを false にします。アクティビティの oncreate() メソッドでは、この値が false の場合にクエリを実行し、WS からそのデータをロードすることはありません。true の場合は、以前にそのデータをロードしたことを意味するため、以前に DB に保存したローカル データを使用できます。

false の場合は、WS からそのデータをロードし、正常にロードして挿入したことを確認した後、このフラグを更新してその値を true に等しくし、次回開いたときにデータが再ロードされないようにする必要があります。アプリケーション。

構成テーブルの代わりに sharedPreference を使用できると思います。


ポイント#2:アプリケーションが古いデータを削除するたびに、データを再ロードして再度挿入する必要があります:SQLite DBを通常どおりに作成し、次にApplicationクラスを拡張するクラスを作成できます。このクラスは最初のクラスですアプリケーションが開かれるとロードされ、onCreate() メソッドが含まれます。最初にすべてのレコードを削除し、次にすべてのデータを再度リロードして、ローカルの SQLite DB に挿入できます。

注: アプリケーション クラスを参照するタグを androidMainfest.xml ファイルに追加することを忘れないでください。これは必須の手順です。

インターネットを介したアプリケーション クラスの例について詳しくは、こちらをご覧ください。 http://developer.android.com/reference/android/app/Application.html

于 2014-04-03T13:19:25.840 に答える