В предыдущей статье я писал о вступлении с RxJava. В этой статье я хочу углубиться в то, как интегрировать наше Android-приложение с RxJava и объединить его с Retrofit.

Прежде чем идти дальше, я ожидаю, что вы знаете о Retrofit, если не просто погуглили.

Как обычно, как и другие зависимости. сначала мы должны добавить RxJava и RxAndroid в Gradle, что будет выглядеть так.

compile 'com.squareup.okio:okio:1.6.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okhttp3:okhttp-urlconnection:3.4.1'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'

Второй. Добавьте RxJavaCallAdapterFactory в помощник по модернизации, который будет выглядеть следующим образом.

private Retrofit buildRetrofit() {
    return new Retrofit.Builder()
            .baseUrl(ApiConstant.BASE_URL)
            .client(buildHttpClient())
            .addConverterFactory(GsonConverterFactory.create(buildGson()))
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build();
}

В-третьих, в вашем сервисном интерфейсе используйте вот так.

@GET("FooUrl1")
Observable<Bar1> getBar1(
        @Query("count") int count,
        @Query("page") int page
);

В-четвертых, в Interactor я использую шаблон проектирования MVP (мы поговорим об этом в следующей статье). использовать так.

public Observable<Bar1> getBar1() {
    return service.getBar1(4, 1)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread());
}
getBar1().subscribe(new SimpleObserver<Bar1>() {
    @Override
    public void onCompleted() {
        super.onCompleted();
        setRefreshing(false);
    }

    @Override
    public void onNext(Bar1 response) {
        super.onNext(response);
        setRefreshing(false);

        clearAdapter();
        bindUI(response);
    }

    @Override
    public void onError(Throwable e) {
        super.onError(e);
        setRefreshing(false);

        DialogFactory.toast(mContext, "Info", e.getMessage());
    }

    @Override
    public String getTag() {
        return TAG;
    }
});

SimpleObserver — это мой пользовательский класс, который расширяется от Observer‹T›.

Надеюсь, вам понравится эта статья. для получения дополнительной информации, просто прокомментируйте или напишите мне по адресу cumy[dot]raditya[at]gmail[dot]com.

@r_adiit | Гитхаб | Линкедин