0
鉴于以下链:doOnNext()从来没有所谓的
public Observable<List<PoiCollection>> findPoiCollectionsByUserId(Integer userId) {
return findUserGroupsByUserId(userId)
.flatMapIterable(
userGroups -> userGroups)
.flatMap(
userGroup -> findPoiCollectionToUserGroupsByUserGroupId(userGroup.getId()))
.flatMapIterable
(poiCollectionToUserGroups -> poiCollectionToUserGroups)
.flatMap(
poiCollectionToUserGroup -> {
Observable<PoiCollection> poiCollectionById = findPoiCollectionById(poiCollectionToUserGroup.getPoiCollectionId());
return poiCollectionById;
})
.toList()
.doOnNext(poiCollections -> {
Timber.d("poi-collections from DB:", poiCollections);
for(PoiCollection collection : poiCollections) {
Timber.d("collection:", collection);
}
})
.doOnError(throwable ->
Timber.e("error fetching poi-collections for user from DB"));
}
被调用是这样的:
Observable<List<PoiCollection>> fromDB = databaseHelper.findPoiCollectionsByUserId(id);
fromDB.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
poiCollections -> {
Activity activity = (Activity) getView();
Intent intent = new Intent(activity, PoiCollectionsActivity.class);
intent.putExtra("poi_collections", (Serializable) poiCollections);
activity.startActivity(intent);
activity.finish();
},
throwable -> {
if (throwable instanceof SocketTimeoutException) {
getView().showInternetDialog();
}
});
,我发现自己不知道为什么没有doOnNext(...)
也不doOnError(...)
被调用。链正在执行,直到toList()
,因此下面的行被执行,之后它才停止。
poiCollectionToUserGroup -> {
Observable<PoiCollection> poiCollectionById = findPoiCollectionById(poiCollectionToUserGroup.getPoiCollectionId());
return poiCollectionById;
})
断点在poiCollectionById
,并从DB顺利另一个内部findPoiCollectionById(...)
清楚地表明,其结果,正在获取!
那么,什么能阻止doOnNext(...)
被调用?我明确调用subscribe(...)
上的可观察。映射链运行至toList()
。我从来没有看到代码运行到doOnError(...)
,我也没有碰到subscribe(...)
的Action<Throwable>
部分。必须与toList()
有关。
订阅时,你是否在onNext()中获取物品? – Ritesh
你可以把doOnNext()放在toList()之前并尝试。 – Ritesh
是的,我可以,我也很期待。问题是toList()调用。但是,我必须能够创建一个列表。否则毫无意义。 –