问题
我有两个 APIs。API 1 给我一个 Items 列表,API 2 为我提供了从 API 1 获取的每个项目的更详细信息。到目前为止,我解决这个问题的方式导致了性能不佳。
问题
如何使用 Retrofit 和 RxJava 解决这个问题,使其更有效率和快速。
我的方法
目前我的解决方案是:
第一步:Retrofit 执行从 API 1 获取的 Single<ArrayList<Information>>
。
第二步:我遍历这些 Items,并对每个 Item 向 API 2 发出请求。
第三步:Retrofit 返回按顺序执行每个项目的 Single<ExtendedInformation>
。
第四步:在 API 2 的所有调用完全执行后,我为所有项目创建一个新对象,组合了 Information 和 Extended Information。
我的代码
public void addExtendedInformations(final Information[] informations) {
final ArrayList<InformationDetail> informationDetailArrayList = new ArrayList<>();
final JSONRequestRatingHelper.RatingRequestListener ratingRequestListener = new JSONRequestRatingHelper.RatingRequestListener() {
@Override
public void onDownloadFinished(Information baseInformation, ExtendedInformation extendedInformation) {
informationDetailArrayList.add(new InformationDetail(baseInformation, extendedInformation));
if (informationDetailArrayList.size() >= informations.length){
listener.onAllExtendedInformationLoadedAndCombined(informationDetailArrayList);
}
}
};
for (Information information : informations) {
getExtendedInformation(ratingRequestListener, information);
}
}
public void getRatingsByTitle(final JSONRequestRatingHelper.RatingRequestListener ratingRequestListener, final Information information) {
Single<ExtendedInformation> repos = service.findForTitle(information.title);
disposable.add(repos.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribeWith(new DisposableSingleObserver<ExtendedInformation>() {
@Override
public void onSuccess(ExtendedInformation extendedInformation) {
ratingRequestListener.onDownloadFinished(information, extendedInformation);
}
@Override
public void onError(Throwable e) {
ExtendedInformation extendedInformation = new ExtendedInformation();
ratingRequestListener.onDownloadFinished(extendedInformation, information);
}
}));
}
public interface RatingRequestListener {
void onDownloadFinished(Information information, ExtendedInformation extendedInformation);
}