Rxjava2+Retrofit2结合mvp的简单教程Rxjav
2017-08-02 本文已影响334人
MrAllRight_Liu
开始讲之前,先推荐大牛的文章让大家去了解一下rxjava
- 扔物线大神 http://gank.io/post/560e15be2dca930e00da1083 你去搜rxjava第一篇应该就是这个,是rxjava入门必看的文章了,现在大神已经辞职在家,专门开博客免费讲解android知识,希望大家去围观 http://hencoder.com/
- http://www.jianshu.com/p/464fa025229e 这个是我在简书上看到写的不错的关于rxjava2的文章,简单易懂,本篇教程使用的也是rxjava2,毕竟要跟上时代潮流
好了,现在我们开始本篇文章
- 1 第一步上网址:https://github.com/ReactiveX/RxJava,虽然rxjava1和2是分别维护的,但是未来rxjava1.x可能就不维护了,所以大家尽量使用rxjava2,毕竟学习成本是一样的。
- 2 引用到项目
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'//retrofit适配器,注意是adapter-rxjava2,如果使用的是rxjava,请使用adapter-rxjava
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'//rxandroid,注意是切换到主线程使用的
compile 'io.reactivex.rxjava2:rxjava:2.1.2'
- 3 retrofit创建时添加rxjava2适配器,代码如下
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())//添加gson转换器
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加rxjava2适配器
.build();
- 4 修改RetrofitService请求返回结果为Observable<ResponseBody>,代码如下
public interface RetrofitService {
@FormUrlEncoded
@POST("app/gift/gift_list/")
Observable<ResponseBody> getGameList(@FieldMap Map<String, String> map);
}
- 5 在activity中调用,代码如下
public class RxjavaSimpleUseActivity extends AppCompatActivity {
private TextView tvResult;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.retrofit);//布局和retrofit一样,使用textview显示结果
tvResult = (TextView) findViewById(R.id.tv_result);
//POST请求和上篇一样,创建请求体
final Map<String, String> map = new HashMap<String, String>();
map.put("page", "1");
map.put("code", "news");
map.put("pageSize", "20");
map.put("parentid", "0");
map.put("type", "1");
HttpCenter.getInstance().service.getGameList(map)
.subscribeOn(Schedulers.io())//指定网络请求在io线程
.observeOn(AndroidSchedulers.mainThread())//指定返回结果处理在主线程,这样我们就可以在onnext中更新ui了
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull ResponseBody responseBody) {
try {
tvResult.setText(responseBody.string());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}
至此运行程序,你就能在屏幕上看到返回结果了,是的就是这么简单。下一篇我们会对rxjava进行封装,希望不熟悉rxjava的小伙伴,认真看一下大神的文章。
本篇代码已经上传:https://github.com/MrAllRight/HttpExample