如何在Firestore Android中添加多个回调?

时间:2019-09-17 13:54:38

标签: android methods callback google-cloud-firestore

我试图将一个模型插入到另一个模型中,这些模型的数据来自Firestore。我尝试了回调方法,但是找不到数据不会循环的方法。

这是我的数据库的结构

第1部分 Part 1

第2部分 enter image description here

第3部分 enter image description here 下面是我必须遵循的Java模型的结构。

basketProductsModelList.add(new BasketProductsModel( "image", "prodtitle", 25, 19.00, 25.00, "prodID"));
        List<CartItemModel> cartItemModelsList = new ArrayList<>();
        cartItemModelsList.add(new CartItemModel(basketProductsModelList, R.drawable.yumin, 2, "Yumin","12345", "percent", 5));
        cartItemModelsList.add(new CartItemModel(basketProductsModelList, R.drawable.puregold, 0, "Puregold", "", "", 0));
        CartAdapter cartAdapter = new CartAdapter(cartItemModelsList);
        cartItemRecyclerView.setAdapter(cartAdapter);
        cartAdapter.notifyDataSetChanged();

这是我尝试过的回调。我的问题是,当我使用prodID获取for loop的数据时,我不知道可以在哪里放置

CartAdapter cartAdapter = new CartAdapter(cartItemModelsList); cartItemRecyclerView.setAdapter(cartAdapter); cartAdapter.notifyDataSetChanged();

编辑:

我在finalData中包含了适配器,但没有收到任何错误,但是输出是重复的。

如果将其放置在外部,则因为firestore是异步的,所以无法获取模型的数据。

finalData(new finalCallback() {
            @Override
            public void onCallback(final List<String> prodID, List<Integer> prodQuantity) {

                for (int n = 0; n < prodID.size(); n++){
                    final int quantity = prodQuantity.get(n);
                    final String prodIDs = prodID.get(n);
                    db.collection("Products").document(prodIDs).get()
                    .addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                            if (task.isSuccessful()) {
                                DocumentSnapshot snapshot2 = task.getResult();
                                String prodName = snapshot2.get("productName").toString();
                                String prodImage = snapshot2.get("productImage.image_1").toString();
                                boolean bargainSale = (boolean) snapshot2.get("Bargain.bargainStatus");
                                long prodPrice = (long) snapshot2.get("productPrice");
                                double oldPrice = (double) prodPrice;


                                if (bargainSale) {
                                    long discountValue = (long) snapshot2.get("Bargain.discountValue");
                                    double newDsct = (int) discountValue;
                                    double discountPoint = newDsct / 100;
                                    double dp = prodPrice * discountPoint;
                                    double newPrice = prodPrice - dp;

                                    basketProductsModelList.add(new BasketProductsModel(prodImage, prodName, quantity, oldPrice, newPrice, prodIDs));

                                } else {
                                    long productCuttedPrice = (long) snapshot2.get("productCuttedPrice");
                                    double oldProdPrice = (double) productCuttedPrice;
                                    basketProductsModelList.add(new BasketProductsModel(prodImage, prodName, quantity, oldPrice, oldProdPrice, prodIDs));
                                }
                                cartItemModelsList.add(new CartItemModel(basketProductsModelList, R.drawable.puregold, 0, "Puregold", "", "", 0));
                                CartAdapter cartAdapter = new CartAdapter(cartItemModelsList);
                                cartItemRecyclerView.setAdapter(cartAdapter);
                                cartAdapter.notifyDataSetChanged();
                            }
                        }
                    });
                }
            }
        });


 private void finalData(final finalCallback finalCallback){
        readData(new FirestireCallback() {
            @Override
            public void onCallback(List<String> storeIDS, String uid) {

                for (int n = 0; n < storeIDS.size(); n++){
                    String storeID = storeIDS.get(n);
                    db.collection("Baskets").document(uid).collection("Store_Baskets")
                            .document(storeID).collection("Basket_Products").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<QuerySnapshot> task) {
                            if (task.isSuccessful()){
                                List<String> prodID = new ArrayList<>();
                                List<Integer> prodQuan = new ArrayList<>();
                                for (DocumentSnapshot snapshot: task.getResult()){
                                    String id = snapshot.getId();
                                    long productQuantity = (long) snapshot.get("productQuantity");
                                    final int quantity = (int) productQuantity;

                                    prodID.add(id);
                                    prodQuan.add(quantity);
                                }
                                finalCallback.onCallback(prodID, prodQuan);
                            }
                        }
                    });
                }

            }
        });
    }

    private void readData(final FirestireCallback firestireCallback){
        Intent intent = getIntent();
        final String UserID = intent.getStringExtra("userid");

        db.collection("Buyers")
                .whereEqualTo("buyerID", UserID)
                .limit(1)
                .get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()){
                    String uid = "";
                    for (DocumentSnapshot snapshot: task.getResult()){
                        uid = snapshot.getId();
                    }
                    final String finalUid = uid;
                    db.collection("Baskets").document(uid).collection("Store_Baskets")
                            .get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<QuerySnapshot> task) {
                            if (task.isSuccessful()){
                                List<String> storeIDs = new ArrayList<>();
                                for (DocumentSnapshot snapshot: task.getResult()){
                                    String storeID = snapshot.getId();
                                    storeIDs.add(storeID);
                                }
                                firestireCallback.onCallback(storeIDs, finalUid);
                            }
                        }
                    });
                }
            }
        });
    }

    private interface finalCallback {
        void onCallback(List<String> prodID, List<Integer> prodQuantity);
    }

    private interface FirestireCallback {
        void onCallback(List<String> storeIDS, String uid);
    }

0 个答案:

没有答案