0
私はRxAndroidで改造してAPIを呼び出しています。ここでは、この方法がRxAndroid onNextが複数回呼び出されています
@GET("product")
Observable<BaseResponse<List<Product>>> getProducts(@Query("lang") String lang,
@Query("category_id") String category_id,
@Query("start") String start,
@Query("count") String count);
定義されている。このAPIはProduct
のリストを返す方法です。私はリスト内の各Productオブジェクトを処理して、その製品がローカルdb &の製品オブジェクトにブール値を設定しているかどうかをチェックしたかったのです。だから私は、私はこの方法で処理されたリストが必要getProductList
に加入している、このよう
public Observable<List<Product>> getProductList(String catId, int start, int count) {
final List<Product> products = new ArrayList<>();
return RestClient.callApiWrapper(mContext, true, null,
RestClient.get().getProducts("en", catId, "" + start, "" + count))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.flatMapIterable(new Func1<BaseResponse<List<Product>>, Iterable<Product>>() {
@Override
public Iterable<Product> call(BaseResponse<List<Product>> listBaseResponse) {
Log.e("TAG", "flatMapIterable called");
return listBaseResponse.getData();
}
})
.map(new Func1<Product, List<Product>>() {
@Override
public List<Product> call(Product product) {
Log.e("TAG", "map called => " + products.size());
products.add(checkIfProductAddedToCart(product));
return products;
}
});
}
それをやった:
mProductListDataModel.getProductList(mCategoryId, mStartOffset, mCount)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<Product>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Product> products) {
Log.e("TAG", "onNext => " + products.size());
if(mOnProductListLoaded != null)
mOnProductListLoaded.onProductListLoaded(products);
}
});
今、問題がある、APIは、実際に5つの製品のリストを返し、 onNext
は毎回5回呼び出され、40個までの製品が増えています。私が間違っていることを教えてください。