Как получить коллекцию и информацию о продукте (включая изображения, цену) в одном запросе Витрины
Как я могу получить коллекцию с подробной информацией о продукте в одном запросе. Что я сделал, так это сначала извлек всю коллекцию, затем из нее я получил идентификатор, и один за другим я включил идентификатор в другой запрос, а затем получил сведения о продукте.
Но я хочу все в одном запросе. Проверьте мой код
step1) сделал запрос для получения коллекции step2) назовем его step3) сделал запрос для получения подробной информации о продукте из шага ответа коллекции)
Storefront.QueryRootQuery query = Storefront.query(rootQuery -> rootQuery
.shop(shopQuery -> shopQuery
.collections(arg -> arg.first(10), collectionConnectionQuery -> collectionConnectionQuery
.edges(collectionEdgeQuery -> collectionEdgeQuery
.node(collectionQuery -> collectionQuery
.title()
.products(arg -> arg.first(10), productConnectionQuery -> productConnectionQuery
.edges(productEdgeQuery -> productEdgeQuery
.node(productQuery -> productQuery
.title()
.productType()
.description()
)
)
)
)
)
)
)
);
@Override
public void onResponse(@NonNull GraphResponse<Storefront.QueryRoot> response) {
List<Storefront.Collection> collections = new ArrayList<>();
for (Storefront.CollectionEdge collectionEdge : response.data().getShop().getCollections().getEdges())
{
collections.add(collectionEdge.getNode());
for (Storefront.ProductEdge productEdge : collectionEdge.getNode().getProducts().getEdges())
{
products.add(productEdge.getNode());
}
for (int i = 0; i < products.size(); i++)
{
Log.i("PRODUCTS", String.valueOf(products.get(i).getId().toString()));
}
}
getActivity().runOnUiThread(new Runnable()
{
@Override
public void run()
{
product_recyclreview.setVisibility(View.VISIBLE);
shimmer.setVisibility(View.GONE);
productAdapter = new ProductAdapter(getActivity(), products);
product_recyclreview.setAdapter(productAdapter);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener()
{
@Override
public void onRefresh()
{
Refresh();
mSwipeRefreshLayout.setRefreshing(false);
}
});
}
});
}
@Override
public void onFailure(@NonNull GraphError error) {
}
});
Storefront.QueryRootQuery querySEC = null;
querySEC = Storefront.query(rootQuery -> rootQuery
.node(new ID(products.get(0).getId().toString()), nodeQuery -> nodeQuery
.onProduct(productQuery -> productQuery
.title()
.description()
.images(arg -> arg.first(10), imageConnectionQuery -> imageConnectionQuery
.edges(imageEdgeQuery -> imageEdgeQuery
.node(imageQuery -> imageQuery
.src()
)
)
)
.variants(arg -> arg.first(10), variantConnectionQuery -> variantConnectionQuery
.edges(variantEdgeQuery -> variantEdgeQuery
.node(productVariantQuery -> productVariantQuery
.price()
.title()
.available()
)
)
)
)
)
);
graphClientsec.queryGraph(querySEC).enqueue(new GraphCall.Callback<Storefront.QueryRoot>()
{
@Override
public void onResponse(@NonNull GraphResponse<Storefront.QueryRoot> response)
{
Storefront.Product product = (Storefront.Product) response.data().getNode();
List<Storefront.Image> productImages = new ArrayList<>();
for (final Storefront.ImageEdge imageEdge : product.getImages().getEdges())
{
productImages.add(imageEdge.getNode());
}
List<Storefront.ProductVariant> productVariants = new ArrayList<>();
for (final Storefront.ProductVariantEdge productVariantEdge : product.getVariants().getEdges()) {
productVariants.add(productVariantEdge.getNode());
}
getActivity().runOnUiThread(new Runnable()
{
@Override
public void run()
{
Drawable mDefaultFailed = getResources().getDrawable(R.drawable.notfound);
for (int i = 0; i < productImages.size(); i++)
{
// String price= String.valueOf(productVariants.get(finalI).getPrice());
if (productImages.get(i).getSrc().isEmpty())
{
Glide.with(getActivity())
.load(productImages.get(i).getSrc())
.into((ImageView) getActivity().findViewById(R.id.img_prdimg)).
onLoadFailed(null, mDefaultFailed);
}
else
{
Glide.with(getActivity())
.load(productImages.get(i).getSrc()).listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target,
boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable
resource, String model, Target<GlideDrawable> target,
boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
})
.into((ImageView) getActivity().findViewById(R.id.img_prdimg));
}
}
}
});
}
@Override
public void onFailure(@NonNull GraphError error) {
}
});