Retrofit+RxJava实战日志(5)-如何获取缓存

首先OKHttp启用缓存目录

OkHttpClient mOkHttpClient = new OkHttpClient();
File cacheDirectory = new File(context.getApplicationContext()
           .getCacheDir().getAbsolutePath(), "HttpCache");  //指定缓存路径
Cache cache = new Cache(cacheDirectory, 20 * 1024 * 1024);  //指定缓存大小
mOkHttpClient.setCache(cache);

Retrofit可以用@POST、@GET注解定义POST方法和GET方法
在参数中用@Header定义请求头部。

参考HTTP协议的内容(传送门:HTTP协议笔记)
POST方法没有缓存;
头部Cache-Control设为max-age=0时则不会使用缓存而请求服务器;
为if-only-cache时只查询缓存而不会请求服务器,max-stale可以配合设置缓存失效时间

以之前写的Retrofit+RxJava的基本使用为例:

public abstract class BaseApi {
    //设缓存有效期为两个星期
    protected static final long CACHE_STALE_SEC = 60 * 60 * 24 * 14;
    //查询缓存的Cache-Control设置
    protected static final String CACHE_CONTROL_CACHE = "only-if-cached, max-stale=" + CACHE_STALE_SEC;
    //查询网络的Cache-Control设置
    protected static final String CACHE_CONTROL_NETWORK = "max-age=0";
}
public class UserApi extends BaseApi{
    //定义接口
    private interface UserService {
        //POST方法没有缓存,适用于更新操作的接口
        @FormUrlEncoded
        @POST("user/user_updateUserName")
        Observable<BaseResp> updateUserName(@Field("userName") String userName);

        //用@Header设置Cache-Control
        @GET("user/user_queryProfile")
        Observable<UserProfileResp> queryProfile(@Header("Cache-Control") String cacheControl,
                                                 @Query("userId") int userId);


    }
    protected static final UserService service = getRetrofit().create(UserService.class);

    //更新用户名接口
    public static Observable<BaseResp> updateUserName(String userName){
        return service.updateUserName(userName);
    }
    //查询用户信息网络接口
    public static Observable<UserProfileResp> queryProfile(int userId){
        return service.queryProfile(CACHE_CONTROL_NETWORK, userId);
    }
    //查询用户信息缓存接口
    public static Observable<UserProfileResp> queryProfileCache(int userId){
        return service.queryProfile(CACHE_CONTROL_CACHE, userId);
    }
}

如此在需要查询缓存的时候调用queryProfileCache,在需要网络数据时调用queryProfile即可。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值