
В предыдущей статье я писал о вступлении с 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.