java二次封装_基于OKhttp+Rxjava2+Retrofit进行二次封装

本文介绍了如何基于Retrofit进行二次封装,结合Okhttp和Rxjava2实现全面的缓存策略。通过拦截器和缓存策略,实现了包括只读缓存、自定义缓存时间等多种场景的支持。同时,提供了初始化设置、请求舍弃策略和请求加载状态的管理。详细步骤包括权限设置、库依赖、HttpApi定义、初始化Retrofit和调用接口的示例。
摘要由CSDN通过智能技术生成

概述

基于Retrofit进行二次封装,优雅的初始化设置。基于Okhttp拦截器和基础缓存,封装了无网络和其他所有场景的缓存策略支持,以及频繁调用请求的丢弃策略。

特性

1、基于Retrofit的二次封装。

简洁的链式初始化方式; 定义接口和注解风格的http接口调用方式; 自动的Api管理; 自动的json解析; log输出; 全策略缓存支持; 请求舍弃策略支持; 请求loading支持;

2、基于okhttp原生缓存,设计了各种缓存策略。

比起外部集成独立的缓存,最高效的还是使用官方缓存。 通过okhttp拦截器技术,通过修改request header和response header,达到穿透缓存和保存缓存的效果;

本工程支持6种缓存策略,包含:只读缓存(无视过期时间),自定义缓存时间,读网络,固定缓存1天,读网络并刷新缓存,读缓存同时请求网络并写缓存。

注意:读缓存同时请求网络,能实现快速显示缓存,并同时请求网络,网络返回并检查缓存,数据不一致,则通知UI更新。达到页面秒开和检查最新数据的效果。

使用步骤

1、权限

2、库依赖

包含OKhttp+Rxjava2+Retrofit相关库,具体看gradle配置

3、定义HttpApi

@ApiGroup(group = "main")

public interface CoolAPi {

@Headers(CacheStrategy.ONLY_CACHE)

@GET("sug?code=utf-8")

Observable>>> testSearchOnlyCache(@Query("q") String keyword);

@Headers(CacheStrategy.NETWORK)

@GET("sug?code=utf-8")

Observable>>> testSearchNetwork(@Query("q") String keyword);

@Headers(CacheStrategy.CACHE_1_HOUR)

@GET("sug?code=utf-8")

Observable>>> testSearchCacheAge(@Query("q") String keyword);

@Headers(CacheStrategy.CACHE_AND_REFRESH)

@GET("sug?code=utf-8")

Observable>>> testSearchSceneCacheCall(@Query("q") String keyword);

@Headers(CacheStrategy.CACHE)

@GET("sug?code=utf-8")

Observable>>> testSearchSceneCache(@Query("q") String keyword);

}

4、初始化retrofit和HttpApi

ApiManager.setDebug(true);

ApiManager.with(this)

.groupBuilder("main")

.baseUrl("https://suggest.taobao.com/")

.cache(new Cache(new File(getCacheDir()+"/okhttpcache"), 64*1024*1024))

.connectTimeout(10)

.readTimeout(10)

.requestAdapter(new CommonParamsAdapter() {

@Override

public void addHeader(Request.Builder builder) {

}

@Override

public void addQueryParams(Request originalRequest, HttpUrl.Builder httpUrlBuilder) {

}

@Override

public void addPostParams(Request originalRequest, Request.Builder requestBuilder) {

}

})

.build();

5、调用接口

ApiManager.api(CoolAPi.class).testSearchSceneCache("零食").subscribe(new ZResponseDataObserver>>(this) {

@Override

public void onResponse(List> result) {

Log.d("okhttp", "cacheLong ====== " + result.toString());

}

});

//如果是多次调用请求,类似搜索模糊提示的场景,可以通过下面方式,只取最后的请求结果。类似的,还有keepFirst策略。

ApiManager.api(CoolAPi.class).testSearchOnlyCache("零食").compose(RxRequestUtils.keepLast());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值