Szenarios Umgang habe ich eine Liste von Territorien und ich werde alle Artikel in jedem holen mag und jede Territory vom Server. Also entschied ich mich, BehaviorSubject
zu verwenden, um es zu versuchen. Ich weiß nicht, ob ich "verrückt" bin oder nicht. Das ist, was ich tat:BehaviorSubject innerhalb eines BehaviorSubject
private Observable<ItemListResponse> getItemByTerritory() {
List<String> territories = PrefUtils.getUserTerritories(context);
BehaviorSubject<Integer> territoryControl = BehaviorSubject.<Integer>create(0);
Observable<ItemListResponse> territoryRet = territoryControl.asObservable().concatMap(integer -> {
if (integer != territories.size()) {
BehaviorSubject<Integer> ret = BehaviorSubject.create(1);
return ret.asObservable().concatMap(integer1 -> {
if (integer > 0) {
return bakeryAPI.getBakeries("Bearer " + PrefUtils.getToken(context), integer1, 21, territories.get(integer))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(itemListRespont -> {
if (itemListRespont.getItemResponse().getMeta().getPage() != itemListRespont.getItemResponse().getMeta().getPageCount() && itemListRespont.getItemResponse().getMeta().getPageCount() > 0) {
ret.onNext(integer1 + 1);
} else {
ret.onNext(-1);
territoryControl.onNext(integer + 1);
}
});
} else {
return Observable.<ItemListResponse>empty().doOnCompleted(ret::onCompleted);
}
});
} else {
return Observable.<ItemListResponse>empty().doOnCompleted(territoryControl::onCompleted);
}
});
return Observable.defer(() -> territoryRet);
}
Alles, was es tut, ist einfach zu hängen, wie nichts ist überhaupt läuft, wenn ich dies tun
public void getItemByTerritory(APIRequestListener apiRequestListener){
realm.executeTransaction(realm1 -> realm1.where(RealmItem.class).findAll().deleteAllFromRealm());
getItemByTerritory().subscribe(new Subscriber<ItemListResponse>() {
@Override
public void onCompleted() {
Log.e(TAG, "Completed Bakery");
apiRequestListener.completed();
unsubscribe();
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
apiRequestListener.handleError(e);
}
@Override
public void onNext(ItemListResponse itemListRespont) {
}
});
}
Ich teste es jetzt. Aber wenn man sich den Code anschaut, macht es Sinn, was ich zu tun versuche. Es gibt mehrere Gebiete. Und jedes Gebiet hat mehrere ausgelagerte Bäckereien. Was 'getItemByTerritory()' mit 'Observable.from (territories) .flatMap (territory -> fetchTerritoryPage (territory, 0))' und 'thisPage.concatWith (nextPage)' löst, hat das paged –
den Code umgestaltet Verwenden Sie "BehaviorSubject", aber die "Tail Recursion" ist ein Ziehen auf große Nutzlast –