Hej,
pobieram z API Forsquare listę wszystkich eventów w okolicy, korzystając z RxJavy. Generalnie jestem stosunkowo nowy w tym i nie do końca rozumiem co "tam się dzieje".
Zacznijmy od mojego interfejsu Retrofita:
@GET("/some/path")
Observable<Response> search(@QueryMap Map map);
Wywołuję go tak:
endpointService.search(requestMap)
.onErrorReturn(throwable -> {
L.e(TAG, "problems");
return null;
})
.subscribe(rxBus::send);
Do tego korzystam z takiego tworu do eventów co się nazywa RxBus
rxBus.register(Response.class)
.subscribe(event -> {
L.d(TAG, "Received search response");
});
No i generalnie po każdym udanym puknięciu w serwer posyłam ten event do zainteresowanych fragmentów itp.
W moim przypadku odbieram go tak:
rxBus.register(Response.class)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.map(event -> event.getResponse().getList())
.flatMap(Observable::from)
.map(v -> new SearchItem(v.getName(), v.getAddress())
.toList()
.subscribe(event -> {
L.w(TAG, "Stuff happens");
});
No i szlag by to trafił, nie działa.
Co najlepsze przysiągłbym, że działało, ale w momencie implementacji adaptera itp. nagle przestało. Ech!
Co nie działa dokładnie? Ano - jeśli zakomentuję linikę toList() to ten log w subscribe mi się wywoła kilka czy kilkanaście razy. Nie mam pojęcia co robię źle.