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に以下のコードを追加する必要があります.
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();
        }
    });
好きなら、スターをあげてください.みんなの意見を聞いて改善し続けます.