小编给大家分享一下RxRetroHttp如何为多套API请求适配,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
初始化
首先,大多库的必备阶段:初始化。我们先来看看初始化的代码,在Application的onCreate中执行
RxRetroHttp.init(this)
.setBaseUrl("http://api1.com/")
.setApiResultClass(Api1Result.class)
.generateRetroClient()
这样,初始化就做完了。。。此处应有掌声。。。
“我掌你大爷!!!说好的处理多套API规则呢!!!”
额咳。。。客观莫急。。。待我徐徐道来
通过刚刚的初始化,你已经设置了App中主API请求的基本配置。如果你的App中,就像前言里描述的那样,需要对接多套API规则,那么在初始化之后,再加入如下代码
RxRetroHttp.getInstance()
.setBaseUrl("https://api2.com/")
.setApiResultClass(Api2Result.class)
.generateRetroClient("API2")
相信大家已经看出区别了吧,没错,就是在generateRetroClient这个方法中,加入了一个Tag,而这个Tag,就是处理多套API请求的关键。
在setApiResultClass方法中,传入的就是对于API规范的基类,具体情况会在后面讲到。
调用
初始化完成后,如何调用呢
RxRetroHttp.create(Api2Service.class).getApi2Info()
我们可以看到,这就是Retrofit风格的调用方式。
在这里,Api2Service也就是Retrofit风格的ApiService,但是也略有不同
@RetroTag("API2")
public interface Api2Service {
@GET("test/info")
Observable<Api2Info> getApi2Info();
}
我们看看不同在哪,下面是纯Retrofit的书写方式
public interface Api2Service {
@GET("test/info")
Observable<Api2Result<Api2Info>> getApi2Info();
}
没错,区别就在于:
1、省去了基类的这一层包裹。这么做的原因是,个人认为,在ApiService这一层,每个接口定义都需要设置ApiResult包裹是不人性的,哈哈哈。
2、RetroTag接口,用于指示Tag,当然这是对于初始化时设置了Tag的API请求。
当然,如果你还是希望以基类包裹的方式,也是可以的,那就是在初始化的时候,不调用setApiResultClass方法就行了。
另外,如果你不想增加RetroTag注解,也是可以的,那在调用的时候,就需要调用另一个方法,放入Tag,如下:
RxRetroHttp.create(Api2Service.class, "API2").getApi2Info()
ApiResult
现在,我们来看看ApiResult。
在setApiResultClass方法中传入的,是实现了IApiResult接口的请求返回基类,简单的样例代码如下
public class Api2Result<T> implements IApiResult<T> {
private int code;
private String msg;
private T result;
@Override
public boolean isSuccess(){
return code == 1;
}
@Override
public T getData(){
return result;
}
@Override
public String getResultMsg(){
return msg;
}
@Override
public String getResultCode(){
return String.valueOf(code);
}
@Override
public String getDataField(){
return "result";
}
}
其对应的返回json如下
{
code: 1,
msg: "请求成功",
result: {
...
}
}
这是一个较为常用的API返回格式,而我们所要做的,就是实现几个基本方法,其中,isSuccess()返回的是请求成功的判断,getData()返回的是请求到的具体数据,getResultMsg()返回的是API请求信息,getResultCode()表示返回码,getDataField()返回的是json数据中表示具体数据的字段(在上面的json例子中,就是“result”)。
更多配置
Http请求不可能没有相关的配置,而本框架并没有为大家内置很多配置方法,原因是,我认为这并不是本框架的主要功能。当然,大家也是可以进行自定义配置的,配置方式如下:
RxRetroHttp.init(this).setXXX().setXXX();
Retrofit.Builder retrofitBuilder = RxRetroHttp.getRetrofitBuilder();
retrofitBuilder.setXXX().setXXX();
OkHttpClient.Builder okHttpBuilder = RxRetroHttp.getOkHttpClientBuilder();
okHttpBuilder.setXXX().setXXX();
RxRetroHttp.getInstance().generateRetroClient();
//RxRetroHttp.getInstance().generateRetroClient("YourTag")
当然各套API请求之间的配置也是隔离的。框架也提供了一些简单的快捷配置方法,比如addInterceptor、addNetworkInterceptor等,更多的配置可以通过上述方式,获取retrofitBuilder和okHttpBuilder来配置。
以上是“RxRetroHttp如何为多套API请求适配”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。