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>() {
上一篇 下一篇

猜你喜欢

热点阅读