一、简介
Rxjava:Reactive Extensions for the JVM,基于JVM的Rx。
Reactive Extensions(Rx)原来是由微软提出的一个综合了异步和基于事件驱动编程的库。
优势:
- 具有响应式编程该有的特性。
- 为异步而生,无需手动创建线程,并具备线程切换能力。
- 支持链式调用,保证代码的简洁性。
- 各种操作符,功能非常强大。满足各种业务需求。
- 简化了异常的处理。 Rxjava适用场景: 网络请求、数据库读写、文件读写、定时任务等各种耗时操作需要通过异步来完成的操作都可以使用Rxjava。
观察者:Observer,观察事件变化并处理的主要角色。消费者(Consumer)也可以理解成一种特殊的观察者。
被观察者:
- 触发事件并决定什么时候发送事件的主要角色。(异步和完成也是一种事件)
- Observable、Flowable、Single、Completable、Maybe都是被观察者。
- Flowable是支持背压的一种被观察者。
- Single、Completable、Maybe是简化版的Obsercable。
- 几种被观察者通过toObservable/toFlowable/toSingle/toCompletable/toMaybe相互转换。
订阅(subscribe):观察者和被观察者建立关联的操作。
1、添加依赖。
compile 'io.reactivex:rxjava:2.0.4'
compile 'io.reactivex:rxandroid:2.0.1'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
2、写一个登录的service
public interface RxService {
@GET("user/login" )
Observable<UserInfo> login(
@Query("username") String username,
@Query("password") String password
);
}
复制代码
3、使用Observable完成一个网络请求,登录成功后保存数据到本地。
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(BASE_URL)
.build();
RxService service = retrofit.create(RxService.class);
service.login(phone, password)
.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.io())
.doOnNext(new Action1<UserInfo>() {
@Override
public void call(UserInfo userInfo) {
saveUserInfo(userInfo);
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<UserInfo>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(UserInfo userInfo) {
}
});