国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

基于Android RxCache使用方法詳解

2019-10-22 18:16:40
字體:
來源:轉載
供稿:網友

前言

我為什么使用這個庫?

事實上Android開發中緩存功能的實現選擇有很多種,File緩存,SP緩存,或者數據庫緩存,當然還有一些簡單的庫/工具類,比如github上的這個:

【ASimpleCache】:a simple cache for android and java

但是都不是很好用(雖然可能學習成本比較低,因為它使用起來相對簡單),我可能需要很多的靜態常量來作為key存儲緩存數據value,并設置緩存的有效期,這可能需要很多Java代碼去實現,并且過程繁瑣。

如果您使用的網絡請求庫是Retrofit+RxJava,那么我推薦使用RxCache,正如作者所說的:

RxCache is a reactive caching library for Android and Java which turns your caching needs into an interface.RxCache是一個用于Android和Java的響應式緩存庫,它可將您的緩存需求轉換為一個接口。

為什么寫這樣一篇文章

因為這個庫的官方文檔是!英!語!的!

這本身無可厚非,作為一個開發者,英語文檔的閱讀是不可避免的一項技能,但是筆者還是抽了一點時間將官方文檔做了漢化:

RxCache官方文檔中文翻譯

RxCache庫官方鏈接

文檔的翻譯比想象中的費力(每一個詞都試圖翻譯準確),但數小時的努力之后,譯文的描述依然對于初次接觸該庫的開發者有著不小的學習難度,干脆自己寫一個demo,并放到github上,供大家參考。

【Github】本文demo源碼,點擊進入

1.依賴配置

在您的build.gradle(Project)中添加JitPack倉庫:

allprojects {  repositories {    jcenter()    maven { url "https://jitpack.io" }  }}

將下列的依賴添加到Module的build.gradle中:

dependencies {  compile "com.github.VictorAlbertos.RxCache:runtime:1.8.1-2.x"  compile "io.reactivex.rxjava2:rxjava:2.0.6"  //我們再添加這個依賴,下面有說明  compile 'com.github.VictorAlbertos.Jolyglot:gson:0.0.3'}

因為RxCache在內部使用 Jolyglot 對對象進行序列化和反序列化, 您需要選擇下列的依賴中選擇一個進行添加:

dependencies {  // To use Gson   compile 'com.github.VictorAlbertos.Jolyglot:gson:0.0.3'  // To use Jackson  compile 'com.github.VictorAlbertos.Jolyglot:jackson:0.0.3'  // To use Moshi  compile 'com.github.VictorAlbertos.Jolyglot:moshi:0.0.3'}

2.Retrofit請求示例

我們假設這樣一個需求,通過傳入user名,返回User對應信息,比如:

Retrofit API接口

public interface GitHubService {  @GET("users/{user}")  Observable<User> getRxUser(@Path("user") String user);}

該API請求的管理類ServiceManager

public class GitHubServiceManager {  private GitHubService service;  public GitHubServiceManager() {    init();  }  private void init() {    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor()        .setLevel(HttpLoggingInterceptor.Level.BODY);    OkHttpClient client = new OkHttpClient()        .newBuilder()        .addInterceptor(interceptor)        .build();    service = new Retrofit.Builder()        .baseUrl("https://api.github.com/")        .addConverterFactory(GsonConverterFactory.create())        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())        .client(client)        .build()        .create(GitHubService.class);  }  public Observable<User> getUser(String user){    return service.getRxUser(user);  }}

User數據類

@Data  //lombok插件的注解,自動生成get、set方法public class User { public String login; public String name;}

最后在我們的Activity中獲取數據:

 new GitHubServiceManager()        .getUser(userName)        .subscribeOn(Schedulers.io())        .observeOn(AndroidSchedulers.mainThread())        .subscribe(user1 -> Toast.makeText(this, user1.toString(), Toast.LENGTH_SHORT).show());

ok,非常簡單,接下來我們來配置緩存,我們默認需求:緩存有效期為1分鐘。

3.緩存配置

配置緩存接口

首先我們先配置Provider接口:

public interface UserCacheProviders {  /**   * LifeCache設置緩存過期時間. 如果沒有設置@LifeCache , 數據將被永久緩存理除非你使用了 EvictProvider,EvictDynamicKey or EvictDynamicKeyGroup .   * @param user   * @param userName 驅逐與一個特定的鍵使用EvictDynamicKey相關的數據。比如分頁,排序或篩選要求   * @param evictDynamicKey  可以明確地清理指定的數據 DynamicKey.   * @return   */  @LifeCache(duration = 1,timeUnit = TimeUnit.MINUTES)  Observable<User> getUser(Observable<User> user, DynamicKey userName, EvictDynamicKey evictDynamicKey);}

很多同學到這里就有點蒙蒙的,不知道這些參數都是用來干嘛的,其實簡單介紹一下就清楚了:

@param user:這是個Observable類型的對象,簡單來說,這就是你將要緩存的數據對象。@param userName:DynamicKey類型,顧名思義,就是一個動態的key,我們以它作為tag,將數據存儲到對應名字的File中@param evictDynamicKey 可以明確地清理指定的數據 ,很簡單,如果我們該參數傳入為true,那么RxCache就會驅逐對應的緩存數據直接進行網絡的新一次請求(即使緩存沒有過期)。如果傳入為false,說明不驅逐緩存數據,如果緩存數據沒有過期,那么就不請求網絡,直接讀取緩存數據返回。@return 可以看到,該接口方法中,返回值為Observable,泛型為user,這個Observable的對象user和參數中傳進來的Observable的對象user有什么區別呢? — 很簡單,返回值Observable中的數據為經過緩存處理的數據。

配置緩存Provider

我們還需要配置的有:

1.緩存文件存儲到哪里?

2.如何解析緩存數據?

public class CacheProviders {  private static UserCacheProviders userCacheProviders;  public synchronized static UserCacheProviders getUserCache() {    if (userCacheProviders == null) {      userCacheProviders = new RxCache.Builder()          .persistence(BaseApplication.getApplication().getExternalCacheDir(), new GsonSpeaker())//緩存文件的配置、數據的解析配置          .using(UserCacheProviders.class);//這些配置對應的緩存接口    }    return userCacheProviders;  }}

代碼中設置緩存功能:

 private void requestHttp(String userName) {     //網絡請求數據    Observable<User> user = new GitHubServiceManager()        .getUser(userName);    //緩存配置        CacheProviders.getUserCache()        .getUser(user, new DynamicKey(userName), new EvictDynamicKey(false))//用戶名作為動態key生成不同文件存儲數據,默認不清除緩存數據        .subscribeOn(Schedulers.io())        .observeOn(AndroidSchedulers.mainThread())        .subscribe(user1 -> Toast.makeText(this, user1.toString(), Toast.LENGTH_SHORT).show());}

配置好后,如果沒有緩存或者緩存失效,則請求網絡數據,緩存并展示數據。

如果有緩存數據且緩存未失效,則不加載網絡數據,直接展示本地緩存數據。

以上這篇基于Android RxCache使用方法詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎鲁特旗| 通山县| 葫芦岛市| 琼海市| 夹江县| 新绛县| 阿拉善右旗| 中方县| 金溪县| 天水市| 怀宁县| 广元市| 利津县| 义乌市| 清河县| 白水县| 米易县| 夏邑县| 桃园县| 西峡县| 桑日县| 双流县| 台南市| 三亚市| 黄大仙区| 满城县| 阿图什市| 扬州市| 长汀县| 泌阳县| 文登市| 遂昌县| 石河子市| 文昌市| 清徐县| 中山市| 县级市| 格尔木市| 宁阳县| 商水县| 仙桃市|