2016-04-19 11 views
0

オフラインで作業できるアプリケーションを作成する必要がありますが、ネットワークの存在下でも、繰り返されるネットワーク要求の数を最小限に抑えることができます。 どうやったらいいかと思います。私は、改造、ローダー、sqliteを使用します。 キャッシュの無効化が時間通りになります(表内のDateTime列) サーバーAPI - > JSON - >オブジェクト - >ネットワークSQLiteデータベースで作業している場合のデータだったときに、時間のマークで埋められますSqliteをアンドロイドのキャッシュ戦略

1)得られた
2)時間のデータが古くない場合(たとえば、8時間未満)、DBの使用可能なデータを再度使用するかどうかを確認するメッセージが表示されたとき。
3)データの有効期限が切れた場合は、ネットワークが持っていないし、現在ではありませんない場合は、より技術的にした場合、アプリケーションは古いデータ

を使用します)
4 sqliteのに繰り返し要求し、更新データを行うことになります正しいオプションは?

可能であれば、、クラス名を実装の詳細を提供するライブラリ、githubのなどへのリンクをしてくださいが... が英語のため申し訳ありません

PSありがとう)

+0

私はあなたがストレージのいくつかの他のタイプを検討している、彼らはすべてではないhttps://en.wikipedia.org/wiki/Relational_databaseを行いながら、多くの人々は、SQLiteの使用を驚いていますか? –

答えて

0

オプション1: ます同期アダプタを使用してデータを最新の状態に保つことができます。 http://developer.android.com/training/sync-adapters/creating-sync-adapter.html

オプション2: キャッシュ無効化ルールを定義できます。最後の書き込み操作があったときに環境設定で保存することができます.8時間を超えた場合や、データベース全体、テーブルまたは単なる行を削除する量を指定することもできます。そして、それを受け取ったばかりのDBに対するすべてのリクエストレスポンスを保存してください。

PSまた、LRUキャッシュにあなたのレスポンスをキャッシュするために、retrofitでokhttpを使用することもできます。

okHttpClient = new OkHttpClient.Builder() 
      .cache(new Cache(new File(Constants.CACHE_DIR, "http"), 10485760)) 
      .build(); 
    restApi = new Retrofit.Builder() 
      .baseUrl(RestApi.API_BASE_URL) 
      .client(okHttpClient).build(); 
+0

_同期アダプタを使用してデータを最新に保つことができます_ SyncAdapterの代わりにJobSchedulerまたはGcmNetworkMangerを使用できますか? –

+0

はいできます。しかし、シンクアダプタは設定が難しく、定型句がたくさんありますが、それは仕事を完了させることに注意してください。 JobSchedulerまたはGcmNetworkManagerを使用することは可能ですが、すべての同期ロジックを実装する必要があります。これは正しく実装するのが難しく、効率的です。 –