目前RxJava和Retrofit结合使用已经是非常普遍了,网上关于这方面的文章也是层出不穷,其实大致的思想都是差不多的,今天我也来写一篇关于RxJava与Retrofit的文章,聊一聊关于RxJava与Retrofit的封装,尽可能的能让其适用于大部分项目,以供大家在学习这方面的时候多一份参考。
关于RxJava的基础使用可以参考我的另一篇文章:《是时候学习RxJava了》,至于Retrofit的基本使用这里我就不做介绍了,这里可以给大家提供一个学习Retrofit比较全面的网址 retrofit-getting-started-and-android-client,对Retrofit还不太熟悉的同学可以先去看看上面的系列文章。
闲话不多说了,直接上今天的主题。我们先来看看关于RxJava和Retrofit最基本的使用是怎么样的
首先我们需要去定义一个对应接口的Service和返回结果的实体类
1 2 3 4 5 6 7 8 9 |
public class GankResultBean { private boolean error; private List<ResultsBean> results; ...省略部分代码... } public interface RxGankService { @GET("data/all/20/{page}") Observable<GankResultBean> getAndroidData(@Path("page") int page); } |
接着再去初始化Retrofit
1 2 3 4 5 |
Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://gank.io/api/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); |
最后我们就可以去使用了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
RxGankService rxGankService = retrofit.create(RxGankService.class); Observable<GankResultBean> observable = rxGankService.getAndroidData(1); observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<GankResultBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(GankResultBean gankResultBean) { } }); |
逻辑还是挺清晰的,但是呢,如果每次使用都让你去写这么多的代码肯定会觉得很乏味,并且这里我还没有对返回结果做错误处理,于是我们就应该考虑一下对代码封装一下了。
但是应该从哪里入手呢,这里简单分析下:
- 看上面的代码我们会发现Retrofit初始化的那段代码,一般就一个baseUrl会有不同,其他的基本是一致的,如果我们每次去创建一个Service都要去写那么多重复的代码也大大增加了冗余度
- 对于返回的结果一般情况下数据格式是这样的:
12345{code:1,msg:"your message",data:[]}
code是服务器端和客户端约定好的一种规则,比如1表示数据请求成功,-1表示请求失败,-2表示权限不足等等,msg代表提示消息,其中data可能是数组对象也可能是普通的对象,我们可以考虑对返回的结果做一个统一的处理。
经过上面的分析我们大致有了一个方向,对于Service的创建应该有一个类去单独处理。所以这里我创建了一个ServiceFactory的类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 e="crayon-5812b889054a7470489665-21">21 22 23 24 25 Java与Retrofit的文章,聊一聊关于RxJava与Retrofit的封装,尽可能的能让其适用于大部分项目,以供大家在学习这方面的时候多一份参考。
关于RxJava的基础使用可以参考我的另一篇文章:《是时候学习RxJava了》,至于Retrofit的基本使用这里我就不做介绍了,这里可以给大家提供一个学习Retrofit比较全面的网址 retrofit-getting-started-and-android-client,对Retrofit还不太熟悉的同学可以先去看看上面的系列文章。 闲话不多说了,直接上今天的主题。我们先来看看关于RxJava和Retrofit最基本的使用是怎么样的 首先我们需要去定义一个对应接口的Service和返回结果的实体类
接着再去初始化Retrofit
最后我们就可以去使用了
逻辑还是挺清晰的,但是呢,如果每次使用都让你去写这么多的代码肯定会觉得很乏味,并且这里我还没有对返回结果做错误处理,于是我们就应该考虑一下对代码封装一下了。 但是应该从哪里入手呢,这里简单分析下:
经过上面的分析我们大致有了一个方向,对于Service的创建应该有一个类去单独处理。所以这里我创建了一个ServiceFactory的类。
|