Android-Retrofit+RxJava 網絡請求的區別詳情

Retrofit和RxJava基礎案例

RxJava優點:延遲指定時間後,發送1個數值,每隔指定時間就發送事件 等等。。。

詳情網站參考:https://www.jianshu.com/p/0d1fb9f08a34

  Retrofit除了提供傳統的網絡請求方式之外,還提供RxJava版本的網絡請求方式。

區別在於:傳統方式採用CallBack接口,而RxJava方式採用了Observable接口,不同點主要體現在:

1. 用於描述網絡請求的接口的設置;

2. 網絡請求的封裝形式和發送形式不同。

下面主要看下這兩個的區別

不同點一:

傳統方式的Call<>接口

public interface GetRequest_Interface {
    @GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
    Call<JSTranslation> getCall();
}

使用RxJava後的接口形式Observable<> 

public interface GetRxJava_Interface {
    @GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
    Observable<JSTranslation> getCall();
}

不同點二:
傳統的方式進行網絡請求
 

//步驟4.創建Retrofit對象
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://fy.iciba.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build();

//步驟5.創建網絡請求接口實例
GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);
//對發送請求進行封裝,採用Call<>方式
Call<JSTranslation> call = request.getCall();

//步驟6.發送網絡請求
call.enqueue(new Callback<JSTranslation>() {
    @Override
    public void onResponse(Call<JSTranslation> call, Response<JSTranslation> response) {
        response.body().show();
    }

    @Override
    public void onFailure(Call<JSTranslation> call, Throwable t) {
        Log.e("eee","連接失敗");
    }
});

 使用RxJava進行網絡請求(記得添加依賴,添加支持RXJava)

//創建Retrofit對象
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://fy.iciba.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .build();
//創建網絡請求接口實例
GetRxJava_Interface request = retrofit.create(GetRxJava_Interface.class);
//對網絡請求進行封裝,採用Observable<>方式
Observable<JSTranslation> observable = request.getCall();
//發送網絡請求(異步),這裏是最大的不同之處
observable.subscribeOn(Schedulers.io())           //在IO線程進行網絡請求
        .observeOn(AndroidSchedulers.mainThread())//回到主線程處理請求結果
        .subscribe(new Observer<JSTranslation>() {
            @Override
            public void onSubscribe(Disposable d) {
                //初始化工作
            }

            @Override
            public void onNext(JSTranslation value) {
                value.show();
                //對返回結果JSTranslation進行處理

               比如:
              //這個地方就是跟以前一樣的網絡請求了
                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("http://fy.iciba.com/")
                        .addConverterFactory(GsonConverterFactory.create())
                        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                        .build();
                GetRxJava_Interface request = 
                retrofit.create(GetRxJava_Interface.class);
                Observable<JSTranslation> login = request.login();
                login.subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Consumer<JSTranslation>() {
                            @Override
                            public void accept(JSTranslation jsTranslation) throws 
                  Exception {
                                jsTranslation.show();
                            }
                        });
            }

            @Override
            public void onError(Throwable e) {
                //請求失敗
            }

            @Override
            public void onComplete() {
                //請求成功
            }
        });


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章