最近做app有一个需求,service的某个接口(B接口)调用很慢,所以不能频繁的调用,然后service就想了一个逻辑:先返回一个调用速度快的接口(A接口),里面有一个字段,一旦这个字段发生了改变,再去调用第二个接口(B接口)。我们app这边的逻辑也很简单,先把A接口调用返回的值用sharedPreference存到本地,然后每次调用A接口的时候都去对比一下本地的值,要是相等就说明不需要调用B接口,要是不相等就要调用!
然后,我以最快的速度,按照之前的套路写完了
1,先写2个model类对应接口A和接口B
2,解析两个接口的数据。(Gson+okhttpfinal(封装okhttp))
3,写逻辑,先调用A,里面嵌套B
然后写完了,我突然想到,好像可以用Retrofit+Rxjava试试,因为我个人是比较反感嵌套的,尤其是波浪形到吗,剪不断理还乱的逻辑。
(友情提示:这篇文章适合已经熟悉简单的Retrofit+Rxjava模式调用接口的同学,要是不熟悉,建议先收藏本文,去熟悉一下,再回来看,你会获益匪浅。这套流程是我们国外的一个开发写的,我稍加整理,贡献给大家。)
第一步 :创建每个接口的model类
名字是
接口A的model:AppdataVersionEntity
接口B的model:AppdataDownLoadEntity
这个地方代码就不给了,很简单,如果使用gson解析json,建议使用GsonFormat插件,很方便。
第二步 :封装Retrofit
1、按照套路,创建一个类来对Retrofit进行简单的封装
public RESTClient(Context context) {
this.context = context;
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("")//这个地方一般放你的域名,所有的接口都有这种格式
.client(provideOkHttpClient(context))//自定义client,如果不需要可以用默认的。 .addConverterFactory(GsonConverterFactory.create())//这一步就省去了手动解析json数据了。
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
restAPI = retrofit.create(RestAPI.class);//创建
}
2、再来看上面说到的自定义client。
private OkHttpClient provideOkHttpClient(final Context context) {
//抓log的,要在app的build.gradle的dependencies里面compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
File httpCacheDirectory =