Я пытаюсь отправить io.reactivex.Flowable из Spring RestController в приложение Android, которое использует Retrofit и Rx java. Если я использую браузер для проверки того, что возвращает конечная точка Rest, я получаю ряд значений, как и ожидалось, но в Android я получаю только одно значение, а затем он вызывает метод onComplete. Чего мне не хватает?
Spring Controller:
@GetMapping("/api/reactive")
public Flowable<String> reactive() {
return Flowable.interval(1, TimeUnit.SECONDS).map(sequence -> "\"Flowable-" + LocalTime.now().toString() + "\"");
}
Модифицированный репозиторий:
@GET("reactive")
Flowable<String> testReactive();
Основной сервис:
public useReactive() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Values.BASE_URL)
.addConverterFactory(JacksonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
userRepository = retrofit.create(UserRepository.class);
Flowable<String> reactive = userRepository.testReactive();
Disposable disp = reactive.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new ResourceSubscriber<String>() {
@Override
public void onNext(String s) {
logger.log(Level.INFO, s);
Toast.makeText(authActivity, s, Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable t) {
t.printStackTrace();
}
@Override
public void onComplete() {
logger.log(Level.INFO, "Completed");
Toast.makeText(authActivity, "Completed", Toast.LENGTH_SHORT).show();
}
});
}
После вызова Метод useReactive (), я получаю только одно значение «Flowable -...», а затем «Завершено».