RxJava 设计的四个概念:
- 观察者: 对事件进行响应的对象,也可以称作消费者,在上述的代码中,subscirbe方法的参数是一个Consumer对象,该对象后续会被包装成一个LambdaObserver对象,即为这段代码中的观察者(消费者)。
- 被观察者: 产生事件的对象,也可以称作生产者,在上述代码中,Observable.fromArray(...)返回的是一个Observable对象,即为这段程序的被观察者(生产者)。
- 事件:RxJava中存在四种事件流:onSubscribe(订阅事件),onNext(正常事件),onError(异常事件),onComplete(完成事件)。在上述代码中,是将数组中的元素作为onNext事件中的数据进行发送。
- 订阅: 创建观察者与被观察者之间观察关系,对应着上述代码中的subscribe()方法。RxJava的事件驱动模型是一种“拉模型”,在观察者没有进行事件订阅之前是不会有事件产生的,只有观察者进行订阅后,才会触发被观察者生产事件。
1.RxJava步骤:
添加依赖:
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
implementation'io.reactivex.rxjava2:rxjava:2.2.4'
implementation'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
2.添加一个登录Service:
public interface RxService {
@FormUrlEncoded //表单方式传递键值对
@POST("user/login")
Observable<UserInfo> login(
@Field("username") String username,
@Field("password") String password
);
}
3.创建RxJava配置:
mRetrofit = new Retrofit.Builder()
.client(builder.build())
.addConverterFactory(GsonConverterFactory.create())//使用Gson解析
.addCallAdapterFactory(RxJava2CallAdapterFactory.create()) //适配RxJava2.0, RxJava1.x则为RxJavaCallAdapterFactory.create()
4.RxJava进行封装请求:
public Observable<UserInfo> login(String username, String password) {
return rxService.login(username, password)
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
RetrofitManager.getManager().login("username", "password")
.subscribe(new Consumer<UserInfo>() {
@Override
public void accept(UserInfo userInfo) throws Exception {
Log.e("TAG", "请求成功" + userInfo);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.e("TAG", "请求失败" + throwable.getMessage());
}
});
}
}