最近项目使用RxJava和Retrofit搭配做网络请求。有一段代码经常重复:
Sevice.XXX()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
RxJavaCallAdapterFactory添加异步调度代码:
public final class RxJava2CallAdapterFactory extends CallAdapter.Factory {
public static RxJava2CallAdapterFactory create() {
return new RxJava2CallAdapterFactory();
}
private retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory mFactory;
private RxJava2CallAdapterFactory() {
this.mFactory = retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory.create();
}
@Override
public CallAdapter<?, ?> get(Type returnType, Annotation[] annotations, Retrofit retrofit) {
final CallAdapter<?, ?> callAdapter = mFactory.get(returnType, annotations, retrofit);
if (null == callAdapter) {
return null;
} else {
CallAdapter<Observable<?>, Observable<?>> adapter = (CallAdapter<Observable<?>, Observable<?>>) callAdapter;
return new KunCallAdapter(adapter);
}
}
final class KunCallAdapter implements CallAdapter<Observable<?>, Observable<?>> {
private CallAdapter<Observable<?>, Observable<?>> mAdapter;
KunCallAdapter(CallAdapter<Observable<?>, Observable<?>> adapter) {
this.mAdapter = adapter;
}
@Override
public Type responseType() {
return mAdapter.responseType();
}
@Override
public Observable<?> adapt(Call<Observable<?>> call) {
return mAdapter.adapt(call).subscribeOn(Schedulers.io())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
}
}
}
添加自定义RxJava2CallAdapterFactory之后省略了异步调度代码:
Sevice.XXX().subscribe();