RxJava2 + Retrofit2的简单使用
2018-12-18 本文已影响0人
jdallen
RxJava
定义:一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序库
总结:RxJava 是一个 基于事件流、实现异步操作的库
概念:一个异步链式库,遵循观察者模式。
特点:随着程序逻辑变得越来越复杂,RxJava依然能够保持简洁。(不花心)
创建RxJava最简单的步骤:1、创建被观察者对象 2、创建观者对象 3、创建订阅关系
可采用 Disposable.dispose() 切断观察者与被观察者 之间的连接(即观察者无法继续接收被观察者的事件,但被观察者还是可以继续发送事件)
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("我是第1句");
emitter.onNext("我是第2句");
emitter.onNext("我是第3句");
emitter.onNext("我是第4句");
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
private Disposable mDisposable;
private int i = 0;
@Override
public void onSubscribe(Disposable d) {
mDisposable = d;
}
@Override
public void onNext(String s) {
i++;
if (i == 2) {
mDisposable.dispose();//切断观察者 与 被观察者 之间的连接
}
Log.e("ATU", "onNext___>"+s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
运行结果图
Schedulers.io() 代表io操作的线程, 通常用于网络,读写文件等io密集型的操作;
Schedulers.computation() 代表CPU计算密集型的操作, 例如需要大量计算的操作;
Schedulers.newThread() 代表一个常规的新线程;
AndroidSchedulers.mainThread() 代表Android的主线程
Retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,Retrofit 除了提供了传统的 Callback 形式的 API,还有 RxJava 版本的 Observable 形式 API
1、添加依赖
implementation "io.reactivex.rxjava2:rxjava:2.1.13"
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
//
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.2.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
//
implementation 'com.google.code.gson:gson:2.8.3'
2、创建API接口
public interface FanFouAPI {
@GET("/WeTalk/user")
Observable<Login> login(@Query("action") String action, @Query("phone") String phone, @Query("passwd") String passwd);
}
3、由于retrofit底层的实现是通过okhttp实现的,所以可以通过okHttp来设置一些连接参数 如超时等
通过new Retrofit.Builder() .client(OkHttpClient client)来设置。
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd hh:mm:ss")
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://39.108.136.80:8080/")
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
FanFouAPI service = retrofit.create(FanFouAPI.class);
service.login("login", "18826231890", "abc123456")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Login>() {