У меня есть этот код ниже, где я пытаюсь выполнить несколько последовательных вызовов API, используя Retrofit2 + RxJava2
@Override
public void onClick(View v) {
count++;
request.setName("rober");
request.setVarryingValue(count);
mApiService.apiService()
.getAccessToken(<params>)
.subscribeOn(Schedulers.newThread())
.flatMap(new Function<Auth, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(Auth authentication) throws Exception {
Observable<Void> postObservable = mApiService.apiService().postCall(request, authentication.getAuth())
.subscribeOn(Schedulers.io());
postObservable.subscribe(new Observer<Void>() {
@Override
public void onSubscribe(Disposable d) {}
@Override
public void onNext(Void value) {
Log.e("Thread", " Thread : " + Thread.currentThread());
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onComplete() {}
});
return postObservable;
}
}).subscribe(new Observer<Object>() {
@Override
public void onSubscribe(Disposable d) {}
@Override
public void onNext(Object value) {}
@Override
public void onError(Throwable e) {}
@Override
public void onComplete() {}
});
}
});
я ожидаю, что для каждого щелчка отправьте вызов в новый/другой поток для выполнения определенного вызова API POST, но у меня есть эти значения сообщения из внутреннего вызова API
{"name ":"rober"," some_varrying_number ":"4"}
04-03 07:23:08.319 27225-27378/edu.rx.test D/OkHttp: --> END POST (1679-byte
body)
04-03 07:23:08.322 27225-27380/edu.rx.test D/OkHttp: --> POST
http://mydomain.test.post.server http/1.1
{"name ":"rober"," some_varrying_number ":"4"}
04-03 07:23:08.319 27225-27378/edu.rx.test D/OkHttp: --> END POST (1679-byte
body)
04-03 07:23:08.322 27225-27380/edu.rx.test D/OkHttp: --> POST
http://mydomain.test.post.server http/1.1
{"name ":"rober"," some_varrying_number ":"4"}
04-03 07:23:08.319 27225-27378/edu.rx.test D/OkHttp: --> END POST (1679-byte
body)
04-03 07:23:08.322 27225-27380/edu.rx.test D/OkHttp: --> POST
http://mydomain.test.post.server http/1.1
{"name ":"rober"," some_varrying_number ":"4"}
04-03 07:23:08.319 27225-27378/edu.rx.test D/OkHttp: --> END POST (1679-byte
body)
04-03 07:23:08.322 27225-27380/edu.rx.test D/OkHttp: --> POST
http://mydomain.test.post.server http/1.1
похоже, что он выполняет только последний вызов, я узнал, что в Rx нет точно «параллельного» вызова, потому что если это произойдет, это нарушит все реактивные принципы, но они говорят, что есть много обходных путей для этого, и теперь Я пытаюсь выполнить этот «параллельный» вызов с кодами, которые я разместил, но не повезло :(, мне нужна помощь здесь,
Любая помощь будет принята с благодарностью. Спасибо!
РЕДАКТИРОВАТЬ: процесс будет таким: 1. сначала получить токен аутентификации 2. после успешного токена аутентификации перейти к вызовам API POST
число 2 зависит от числа 1
1 и 2 всегда будут выполняться по событиям щелчка.
Изменить: я опубликую изображение, чтобы наглядно проиллюстрировать его.
- У меня есть 2 источника (это может быть 3 или больше)
- Эти источники поступают из событий кликов
- Каждый источник будет обрабатывать разные сетевые вызовы
- Я пытаюсь выполнить его в другом потоке (чтобы сделать его асинхронным)
но похоже, что он обрабатывает только последнее событие (щелкнул)
- используя изображение выше, я ожидаю, что POST A и POST B будут происходить параллельно/по-разному
- но он выполняет только POST B (фактически 2 POST B)
- я ожидаю, что он будет выполнять POST A и POST B по-разному