Прежде всего, у меня есть продукты, некоторые из которых имеют варианты, такие как размер, а другие не имеют вариантов, мне нужно извлечь только живые продукты из всех продуктов и добавить нумерацию страниц.
Проблема слияния задач сработала хорошо, но запрос внутри него документов подколлекции (в случае, если у продукта есть варианты) не работает
структура пожарного депо
private void getStoreLiveProducts(String storeId) {
final int limit = 9;
Task task1, task;
if (lastLiveProductRef == null) {
msvLiveProducts.setViewState(MultiStateView.ViewState.LOADING);
task1 = FirebaseFirestore.getInstance()
.collection("Products")
.whereEqualTo("storeId", storeId)
.whereEqualTo("status", "live")
.limit(limit)
.get();
task = FirebaseFirestore.getInstance()
.collection("Products")
.whereEqualTo("storeId", storeId)
.whereEqualTo("hasVariant", true)
.limit(limit)
.get();
} else {
ppMoreProducts.setVisibility(View.VISIBLE);
task1 = FirebaseFirestore.getInstance()
.collection("Products")
.whereEqualTo("storeId", storeId)
.whereEqualTo("status", "live")
.limit(limit)
.startAfter(lastLiveProductRef)
.get();
task = FirebaseFirestore.getInstance()
.collection("Products")
.whereEqualTo("storeId", storeId)
.whereEqualTo("hasVariant", true)
.limit(limit)
.startAfter(lastLiveProductRef)
.get();
}
Task<List<QuerySnapshot>> allSuccess = Tasks.whenAllSuccess(task1, task);
allSuccess.addOnSuccessListener(new OnSuccessListener<List<QuerySnapshot>>() {
@Override
public void onSuccess(List<QuerySnapshot> querySnapshots) {
for (QuerySnapshot queryDocumentSnapshots : querySnapshots) {
for (final DocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
if (ppMoreProducts.getVisibility() == View.VISIBLE)
ppMoreProducts.setVisibility(View.GONE);
msvLiveProducts.setViewState(MultiStateView.ViewState.CONTENT);
if (documentSnapshot.get("hasVariant") != null) {
boolean hasVariant = (boolean) documentSnapshot.get("hasVariant");
if (!hasVariant) {
Product product = documentSnapshot.toObject(Product.class);
liveProducts.add(product);
productAdapter.notifyDataSetChanged();
}
} else {
Log.e( "onSuccess: ", documentSnapshot.getId()+"");
documentSnapshot
.getReference()
.collection("Variants")
.whereEqualTo("status", "live")
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (DocumentSnapshot snapshot : queryDocumentSnapshots.getDocuments()) {
Log.e( "snapshot: ", snapshot.getId()+"");
}
}
});
}
}
if (queryDocumentSnapshots.getDocuments().size() < limit)
lastItemReached = true;
lastLiveProductRef = queryDocumentSnapshots.getDocuments().get(queryDocumentSnapshots.getDocuments().size() - 1);
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e("onFailure: ", e.getMessage() + "");
}
});
}