シナリオテリトリー
のリストがあり、すべてのテリトリー内のすべてのアイテムをサーバーから取得したいと考えています。ということで、使ってみることにしました。自分が「狂気」なのかどうかはわかりません。これは私がしたことです: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);
}
これを行うと何も実行されていないように、ただハングするだけです
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) {
}
});
}