Хочу подписаться на ответ, полученный на запрос из сети.
Допустим у меня есть такой интерфейс:
interface Net {
// Посылает запрос в сеть, а когда приходит ответ
// дергает callback в своем сетевом потоке
void sendRequestGetResponse(String request, Consumer<String> responseCallback);
}
Но я не хочу обрабатывать данные в сетевом потоке, мне надо обрабатывать их в нужном потоке, например в моем ThreadPoolExecutor.
И хочется сделать что-то такое:
Observable<String> observable = <как то создали свой observable, я не знаю как>;
// Подписались на обработку ответа в нужном executor
observable.subscribeOn(Schedulers.from(executor)).subscribe(response -> {
System.out.println("received response " + response);
});
net.sendRequestGetResponse("hello!", response -> {
// Получили ответ и положили его в observable
observable.push(response);
});
Как это правильно делается с помощью RxJava?
observeOn. События будут доставляться туда, куда вы скажете. – VladD Jun 10 '16 at 18:29Мне непонятно, как полученный в сетевом потоке response засунуть в мой observable.
– Натрий Хлорий Jun 10 '16 at 18:33observeOn.subscribeOnпроизводит подписку в потоке, который вы указали. АobserveOnдоставляет события в поток, который вы указали. – VladD Jun 10 '16 at 18:40observable.observeOn(<куда-вы-там-хотите-переложить>).subscribe(response -> { System.out.println("received response " + response); });, судя по всему. (У меня компилятора нет под рукой, чтобы проверить, так что помогайте.) – VladD Jun 10 '16 at 18:45