Как получить документы подколлекции Firestore в локальных задачах слияния - PullRequest
0 голосов
/ 26 февраля 2020

Прежде всего, у меня есть продукты, некоторые из которых имеют варианты, такие как размер, а другие не имеют вариантов, мне нужно извлечь только живые продукты из всех продуктов и добавить нумерацию страниц.

Проблема слияния задач сработала хорошо, но запрос внутри него документов подколлекции (в случае, если у продукта есть варианты) не работает

структура пожарного депо

product without variants product with variant variant details

 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() + "");
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...