美文网首页
RxJava2 + Retrofit2的简单使用

RxJava2 + Retrofit2的简单使用

作者: jdallen | 来源:发表于2018-12-18 18:36 被阅读0次

    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>() {
    

    相关文章

      网友评论

          本文标题:RxJava2 + Retrofit2的简单使用

          本文链接:https://www.haomeiwen.com/subject/qxatrftx.html