Androidライト級のデータキャッシュフレーム:RxCache
5640 ワード
要求ネットワークデータは、Android開発において最も頻繁に使用される機能であり、ネットワーク要求の体験は、ユーザーのAPP全体に対する感覚を決定しているので、キャッシュを合理的に使用して、ネットワーク要求のデータを処理することが極めて重要である.キャッシュとネットワーク要求を合理的に行い、APPにより優れた体験をもたらすことができる.ピクチャーのキャッシュはPicasso、Glide、Freescoなどのとても有名なフレームがあって、それらはきわめて熟していてしかも広範なことを使って、プログラマがするべきなのは車輪を使うのです.しかし、ネットワークデータのキャッシュについては、ほとんどが自分でパッケージ化しています.RxCacheは、ネットワークキャッシュをカプセル化し、RxJavaモードを採用し、他のRxJavaのコードとシームレスにドッキングすることができ、非常に便利です.
RxCacheはLru CacheとDiskLruCacheを使用してネットワーク要求データを二段階キャッシュし、主にインターフェースAPIに適合してデータを返し、ピクチャなどのキャッシュには使用しない.キャッシュモード、キャッシュサイズを設定し、データの有効期限を設定し、キーに従ってキャッシュを削除し、すべてのキャッシュをクリアする機能を提供します.Gson方式とSerialize方式でデータストア変換と復元を提供します.
プロジェクトGitHubアドレス
RxCache
使用開始:
まずプロジェクトのGraadleに依存を追加します.
RxCacheはJitPackを使って依存管理を行うので、まずプロジェクトのbuild.gradleに以下のコードを追加する必要があります.
キャッシュを読み込むときは、以下のような場合があります.
Gson変換時:
基本タイプのデータを読んだり、ユーザー定義のjavabeanデータを読んだり、配列データなどすべて取得できます.クラスのデータです.
RxCacheはLru CacheとDiskLruCacheを使用してネットワーク要求データを二段階キャッシュし、主にインターフェースAPIに適合してデータを返し、ピクチャなどのキャッシュには使用しない.キャッシュモード、キャッシュサイズを設定し、データの有効期限を設定し、キーに従ってキャッシュを削除し、すべてのキャッシュをクリアする機能を提供します.Gson方式とSerialize方式でデータストア変換と復元を提供します.
プロジェクトGitHubアドレス
RxCache
使用開始:
まずプロジェクトのGraadleに依存を追加します.
RxCacheはJitPackを使って依存管理を行うので、まずプロジェクトのbuild.gradleに以下のコードを追加する必要があります.
allprojects{
repositories{
...
maven{url 'https://jitpack.io'}
}
}
次に、Moduleのgradleに以下の依存性を追加する.compile 'com.github.LtLei:RxCache:v1.0.0'
あなたのアプリで初期化を行います.RxCache.init(this);// RxCache Context
Buiderを使用して高度な初期化を行うこともできます.new RxCache.Builder()
.setDebug(true) // debug, , true
.setConverter(new GsonConverter()) // , Gson
.setCacheMode(CacheMode.BOTH) // ,
.setMemoryCacheSizeByMB(50) // , MB
.setDiskCacheSizeByMB(100) // , MB
.setDiskDirName("RxCache") //
.build();
キャッシュに書き込みRxCache.getInstance()
.put("test", "This is data to cache.", 10 * 1000) //key: key data: time:
.compose(RxUtil.io_main()) //
.subscribe(new Consumer() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if (aBoolean) Log.d("Cache", "cache successful!");
}
},new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
throwable.printStackTrace();
}
});
キャッシュを読み込むキャッシュを読み込むときは、以下のような場合があります.
Gson変換時:
基本タイプのデータを読んだり、ユーザー定義のjavabeanデータを読んだり、配列データなどすべて取得できます.クラスのデータです.
RxCache.getInstance()
.get("test",false,String.class) //key: key update: NULL
.compose(RxUtil.>io_main())
.subscribe(new Consumer>() {
@Override
public void accept(CacheResponse stringCacheResponse) throws Exception {
if(stringCacheResponse.getData()!=null)
Log.d("data from cache : "+stringCacheResponse.getData());
}
},new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
throwable.printStackTrace();
}
});
Listなどの読み取りはできません.classのデータは、以上の基本データでも使えます.Type type = new TypeToken>(){}.getType();
RxCache.getInstance()
.>get("test",false,type) // Type ,
.compose(RxUtil.>>io_main())
.subscribe(new Consumer>>() {
@Override
public void accept(CacheResponse> listCacheResponse) throws Exception {
if(listCacheResponse.getData()!=null)
Log.d("data from cache : "+listCacheResponse.getData().toString());
}
},new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
throwable.printStackTrace();
}
});
Serialize方式の場合は、以下の方法を統一して使用すればいいです.RxCache.getInstance()
.>get("test",false) // , .class Type
.compose(RxUtil.>>io_main())
.subscribe(new Consumer>>() {
@Override
public void accept(CacheResponse> listCacheResponse) throws Exception {
if(listCacheResponse.getData()!=null)
Log.d("data from cache : "+listCacheResponse.getData().toString());
}
},new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
throwable.printStackTrace();
}
});
指定キャッシュをクリアRxCache.getInstance()
.remove("testList")
.compose(RxUtil.io_main())
.subscribe(new Consumer() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if (aBoolean) Log.d("cache data has been deleted.");
}
}, new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
throwable.printStackTrace();
}
});
すべてのキャッシュをクリアRxCache.getInstance()
.clear()
.compose(RxUtil.io_main())
.subscribe(new Consumer() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if (aBoolean) Log.d("All datas has been deleted.");
}
}, new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
throwable.printStackTrace();
}
});
好きなら、スターをあげてください.みんなの意見を聞いて改善し続けます.