美文网首页
RxJava与Retrofit的基本使用和结合使用

RxJava与Retrofit的基本使用和结合使用

作者: feelon | 来源:发表于2020-01-09 15:04 被阅读0次

RxJava是什么?

Rx全称为ReactiveX,它一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流。它基于设计模式中的观察者模式,通过以下的方式简化代码:

函数式风格:对可观察数据流使用无副作用的输入输出函数,避免了程序里错综复杂的状态

简化代码:Rx的操作符通通常可以将复杂的难题简化为很少的几行代码

异步错误处理:传统的try/catch没办法处理异步计算,Rx提供了合适的错误处理机制

轻松使用并发:Rx的Observables和Schedulers让开发者可以摆脱底层的线程同步和各种并发问题

RxJava基本使用:

第一步:创建一个Observable(被观察者)

        Observable observable=Observable.create(new ObservableOnSubscribe<String>() {

            public void subscribe(ObservableEmitter<String> observableEmitter) throws Exception {

                observableEmitter.onNext("onNext");

            }

        });

第二步:创建一个Observer(观察者)

      Observer<String> observer=new Observer<String>() {

            public void onSubscribe(Disposable disposable) {

            }

            public void onNext(String s) {

                System.out.println(s);

            }

            public void onError(Throwable throwable) {

            }

            public void onComplete() {

            }

        };

第三步:建立订阅关系

        observable.subscribe(observer);

当然也可以使用链式格式

        Observable.create(new ObservableOnSubscribe<String>() {

            public void subscribe(ObservableEmitter<String> observableEmitter) throws Exception {

                observableEmitter.onNext("onNext");

            }

        }).subscribe(new Observer<String>() {

            public void onSubscribe(Disposable disposable) {

            }

            public void onNext(String s) {

                System.out.println("onNext:"+s);

            }

            public void onError(Throwable throwable) {

            }

            public void onComplete() {

            }

        });

Retrofit是什么?

Retrofit是一款基于OkHttp的的网络请求框架,它对OkHttp做了大量封装,将网络请求的细节交给OkHttp,开发者只需进行少量配置便可以轻松进行网络请求。

Retrofit的使用:

第一步:创建一个请求的接口

public interface PeopleService {

    @GET("mPath")

    Call<PeopleEntiy> getPeople(@Query("name") String name);

}

 第二步:创建一个实例

String url="...";    //请求接口url

Retrofit retrofit = new Retrofit.Builder()

    .baseUrl(url)

    .addConverterFactory(GsonConverterFactory.create())

    .build();

PeopleService service = retrofit.create(PeopleService.class);

第三步:获取一个call实例

Call<PeopleEntity> call = service.getPeople("小明");

第四步:同步或者异步请求

1.同步请求(需要阻塞)

PeopleEntity response = call.execute().body();

 2.异步请求

call.enqueue(new Callback<PeopleEntity>() {

  @Override

  public void onResponse(Call<PeopleEntity> call,Response<PeopleEntity> response) {

  }

  @Override

  public void onFailure(Call<PeopleEntity> call, Throwable t) {

  }

});

RxJava与Retrofit的结合使用

由于要使用Rxjava,所以要将数据的处理权交给Observer(被观察者)而不是Call,那么就要把返回的Call改为Observable。

public interface PeopleService {

    @GET("mPath")

    Observable<PeopleEntiy> getPeople(@Query("name") String name);

}

添加RxJava的支持

String url="...";    //请求接口url

Retrofit retrofit = new Retrofit.Builder()

    .baseUrl(url)

    .addConverterFactory(GsonConverterFactory.create())

    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())  // 添加RxJava的支持

    .build();

PeopleService service = retrofit.create(PeopleService.class);

获取Observable实例

Observable<PeopleEntity> observable= service.getPeople("小明");

建立订阅关系

        observable.subscribeOn(Schedulers.io()) // 异步处理http请求

        .observeOn(AndroidSchedulers.mainThread()) // 在UI线程处理结果

        .subscribe(new Observer<PeopleEnity>() { // 订阅

            @Override

            public void onSubscribe(Disposable d) {

            }

            @Override

            public void onCompleted() {

            }

            @Override

            public void onError(Throwable e) {

            }

            @Override

            public void onNext(PeopleEnity peopleEnity) {

            }

        });

两者结合起来,虽然在代码层面看起来似乎是复杂了,但是简化了处理的逻辑,使代码变得更加清晰有条理。

在Android的业务层与显示层分离上,这种结合使用的方式也有很大优势:

可以将Observer的创建放在显示层上,对信息进行显示处理,而将Observer对象传给业务层进行业务处理。

业务层变为:

        observable.subscribeOn(Schedulers.io())

        .observeOn(AndroidSchedulers.mainThread())

        .subscribe(observer);  //显示层传过来的observer对象

显示层处理显示逻辑:

        Observer observer=new Observer<PeopleEnity>() {

            @Override

            public void onSubscribe(Disposable d) {

            }

            @Override

            public void onCompleted() {

            }

            @Override

            public void onError(Throwable e) {

            }

            @Override

            public void onNext(PeopleEnity peopleEnity) {

                textview.setText(peopleEnity.getName())

            }

        };

相关文章

网友评论

      本文标题:RxJava与Retrofit的基本使用和结合使用

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