所以我很新的反应式编程,跟随这tuto我能送多线程REST的请求,像这样经过:改造和RxJava,Android的多线程REST请求
Retrofit2接口:
@FormUrlEncoded
@PUT("path")
Observable<String> putMethod(
@Field("field") String field,
...
);
Retrofit2建设者:
private NetRequestService() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(END_POINT)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
service = retrofit.create(RetrofitInterface.class);
}
请求:
public void putMethod(Context context, List<Object> objectList){
for(Object o: objectList) {
service.putMethod(
"field",
...
)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<String>() {
@Override
public final void onCompleted() {
}
@Override
public final void onError(Throwable e) {
Log.e("Error", e.getMessage());
}
@Override
public final void onNext(String response) {
Log.e("Response", response);
}
});
}
}
一切工作正常,问题是,onCompleted()方法被调用为每个呼叫(如预期),但我想,当完成到service.putMethod(...)的所有调用就知道了。我怎样才能做到这一点?当所有调用完成后,我想要进行某种回调来执行另一个操作。
感谢
下面的答案是正确的,但我想补充一点,你应该在使用Schedulers.newThread之前考虑三次。使用特殊的调度程序'io'。其原因是,newThread会为每个方法调用新thred,当IO调度器使用线程池为。 – shagi