我有一个网络呼叫,其中将返回300个ID,我需要为每个id进行网络呼叫,并在列表中对结果进行编译。我试图使用flatmap来做到这一点,但遇到问题。
有没有办法为paral定义线程创建的数量 任何人都可以给我一个并行执行网络调用的例子,以便在android中使用rxjava1和rxjava2快速获得结果。
这是片段中的代码来获取所有记录:
private void subscribeToStories() {
contentValues.clear();
if (isOnline()) {
//Provider provider = Inject.provider();
subscription =
new HNewsApi().getTopStories()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Post>() {
@Override
public void onCompleted() {
if (!subscription.isUnsubscribed()) {
subscription.unsubscribe();
}
// new Thread(new Runnable() {
// @Override
// public void run() {
//
/ / }
// }).start();
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(final Post total) {
contentValues.add(mapStory(total));
Inject.dataPersister().persistStories(contentValues);
//contentValues.add(mapStory(total));
//Log.e("Storytitle",""+total.getTitle());
}
});
} else {
stopRefreshing();
}
}
这是我对rxjava的调用:
public Observable<Post> getTopStories() {
return hackerNewsService.getTopStories().limit(20)
.concatMap(new Func1<List<Long>, Observable<? extends Post>>() {
@Override
public Observable<? extends Post> call(List<Long> longs) {
return getPostsFromIds(longs);
}
});
}
public Observable<Post> getPostsFromIds(List<Long> storyIds) {
return Observable.from(storyIds)
.concatMap(new Func1<Long, Observable<Post>>() {
@Override
public Observable<Post> call(Long aLong) {
return hackerNewsService.getStoryItem(String.valueOf(aLong));
}
});
}
我想执行并行执行并从此处返回Post对象列表而不是Post。
答案 0 :(得分:0)
flatMap
有一个名为maxConcurrency
的参数,您可以在其中定义flatMap可以生成的线程数。默认为Integer.MAX_VALUE
所以我认为这就是问题。