1. 程式人生 > >RxJava+Retrofit 在專案中的使用

RxJava+Retrofit 在專案中的使用

簡介:RxJava是一個基於事件流,實現非同步操作的庫

使用方式:基於事件流的鏈式呼叫

原理:基於一種擴充套件的觀察者模式

Observable(被觀察者)、Observer(觀察者)、subscribe(訂閱)

在專案中的使用

一、在gradle中新增如下配置

implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
implementation 'io.reactivex:rxjava:1.2.6'
implementation 'io.reactivex:rxandroid:1.2.1'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

二、Retrofit介面定義,如下

public interface RetrofitInterface {

    @FormUrlEncoded
    @POST("")
    Observable<TheBean> getData(
            @Field("id")String theId,
            @Field("page")String thePage);
}

三、建立APIService例項,如下

public class APIService {

    private RetrofitInterface retrofitInterface;
    private static APIService apiService;

    //獲取APIService的單例
    public static APIService getInstence() {
        if (apiService == null) {
            synchronized (APIService.class) {
                if (apiService == null) {
                    apiService = new APIService();
                }
            }
        }
        return apiService;
    }

    //封裝配置API
    public RetrofitInterface getDailyService() {
        if (retrofitInterface == null) {
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(ConstantsData.URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .build();
            //建立完成
            retrofitInterface = retrofit.create(RetrofitInterface.class);
        }
        return retrofitInterface;
    }
}

四、使用,如下

APIService.getInstence().getDailyService().getData("1", "1").subscribeOn(Schedulers.io())//在子執行緒請求資料
        .observeOn(Schedulers.io())  //請求完成後子執行緒中執行
        .doOnNext(new Action1<TheBean>() {
            @Override
            public void call(TheBean theBean) {
                //例如儲存資料的操作
            }
        })
        .observeOn(AndroidSchedulers.mainThread())//在主執行緒顯示資料
        .subscribe(new Subscriber<TheBean>() {
            @Override
            public void onCompleted() {
                //請求完成
            }

            @Override
            public void onError(Throwable throwable) {
                //請求錯誤
            }

            @Override
            public void onNext(TheBean theBean) {
                //請求成功,在此處理
            }
        });