大量のデータセットを含むListViewがあります。
最初は、Webサービスからすべてのデータをロードします。
次に、そのデータをキャッシュして、そのページを再度開く場合に、Webサービスに再度クエリを実行する代わりに、キャッシュからデータをフェッチできるようにします。
それ、どうやったら出来るの?。
大量のデータセットを含むListViewがあります。
最初は、Webサービスからすべてのデータをロードします。
次に、そのデータをキャッシュして、そのページを再度開く場合に、Webサービスに再度クエリを実行する代わりに、キャッシュからデータをフェッチできるようにします。
それ、どうやったら出来るの?。
取得したデータをWebService
シリアル化可能なオブジェクトに保存していると思います(編集する前に質問で述べたように)。
シリアライズ可能なオブジェクトをファイルに保存し、後でロードできます。
店:
FileOutputStream fileOutputStream = yourContext.openFileOutput(fileName, Context.MODE_PRIVATE);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(yourObject);
objectOutputStream.close();
ロード:
FileInputStream fileInputStream = yourContext.openFileInput(fileName);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
Object yourObject = (Object)objectInputStream.readObject();
objectInputStream.close();
あなたのケースはそのようなものです:
アプリの存続期間よりも長く情報を保持したい場合は、SQLデータベースを使用するかどうかを決定する必要があります。そうしないと、アダプターで問題ありません。
Samples for SDKパッケージで提供されているApiデモには、ListAdaptersを使用したListの例がいくつかあります。たとえば、List5.javaです。
これを行うには、Web サービスを介して取得したデータを、それに応じて構造化された SQLite データベースに保存します。データベースの最後のレコードよりも新しいデータを取得したい場合は、SharedPreferences ファイルにキー値を保存する必要があります。例:
Web サービスからすべてのカレンダー イベントを取得したいのですが、
今日、ユーザーはイベント番号から 1 月のイベントにのみアクセスしました。1~イベントNo. 10 (初めて、これらは Web サービスを介して取得され、SQLite データベースにローカルに保存され、カーソルを使用して表示されます)。
明日、ユーザーがアプリケーションをロードすると、既に取得されたデータが SQLite データベース (「キャッシュ」) からロードされ、ユーザーは Web サービスを通じて 10 より新しいイベントのみを取得します。前日のプロセスを繰り返します (つまり、取得したエンティティを SQLite DB に格納し、1 から 'x' まですべて表示します)。
この場合、イベント 1 から 10 をデータベースに保存し、「11」を共有設定に保存して、取得するエンティティの次のバッチの開始点を知ることができます。私はあなたを導くことができたことを願っています。
Android で利用可能なストレージ オプションをご覧ください: http://developer.android.com/guide/topics/data/data-storage.html
ではごきげんよう :)