Firestore не удалит документ - Android - PullRequest
0 голосов
/ 27 июня 2019

Я работаю над приложением магазина. Существует RecyclerView, который отображает элементы, добавленные в корзину. Каждый элемент имеет флажок. Когда флажок установлен, элемент должен быть добавлен в Firestore. До сих пор это работает. Но что не работает, так это то, что если флажок снят, и пользователь не хочет размещать заказ с этим элементом, документ должен быть удален из магазина, а это не так.

Это код:

holder.cartCheckBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {

            int adapterPosition = holder.getAdapterPosition();

            if (firebaseUser != null) {

                userID = firebaseUser.getUid();

                char[] chars1 = "0123456789".toCharArray();

                StringBuilder stringBuilder = new StringBuilder();
                Random random = new Random();
                for (int i = 0; i < 16; i++) {
                    char c1 = chars1[random.nextInt(chars1.length)];
                    stringBuilder.append(c1);
                }
                final String order_id = stringBuilder.toString();

                final DocumentReference priceDocument = firebaseFirestore.collection("Shopping Cart").document(userID).collection("Total Amount").document("price");

                if (!itemStateArray.get(adapterPosition, false)) {

                    holder.cartCheckBox.setChecked(true);
                    itemStateArray.put(adapterPosition, true);
                    // Toast.makeText(context, "You selected: " + cartItemID + " " + "(" + name + ")", Toast.LENGTH_LONG).show();

                    priceDocument.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<DocumentSnapshot> task) {

                            if (task.isSuccessful()) {

                                DocumentSnapshot documentSnapshot = task.getResult();

                                if (documentSnapshot.exists()) {

                                    String oldPrice = task.getResult().getString("price");

                                    int priceInteger = Integer.parseInt(price) + Integer.parseInt(oldPrice);

                                    String finalPrice = Integer.toString(priceInteger);

                                    myCallback.priceListenerMethod(finalPrice);

                                    Map<String, Object> priceMap = new HashMap<>();
                                    priceMap.put("price", finalPrice);

                                    priceDocument.set(priceMap);

                                    /*
                                    orderCallBack.orderListenerMethod("image_url: " + image_url);
                                    orderCallBack.orderListenerMethod("name: " + name);
                                    orderCallBack.orderListenerMethod("size: " + size);
                                    orderCallBack.orderListenerMethod("price_checked: " + price);
                                    orderCallBack.orderListenerMethod("final_price_checked: " + finalPrice);
                                    */

                                    Map<String, Object> orderMap = new HashMap<>();
                                    orderMap.put("image", image_url);
                                    orderMap.put("name", name);
                                    orderMap.put("size", size);
                                    orderMap.put("color", color);
                                    orderMap.put("price", price);
                                    orderMap.put("total", finalPrice);

                                    firebaseFirestore.collection("Orders").document(userID).collection("Order ID").document(order_id).set(orderMap, SetOptions.merge());

                                } else {

                                    Map<String, Object> priceMap = new HashMap<>();
                                    priceMap.put("price", price);

                                    myCallback.priceListenerMethod(price);

                                    priceDocument.set(priceMap);

                                    Map<String, Object> orderMap = new HashMap<>();
                                    orderMap.put("image", image_url);
                                    orderMap.put("name", name);
                                    orderMap.put("size", size);
                                    orderMap.put("color", color);
                                    orderMap.put("price", price);

                                    firebaseFirestore.collection("Orders").document(userID).collection("Order ID").document(order_id).set(orderMap);

                                }

                            }

                        }
                    });

                } else {

                    holder.cartCheckBox.setChecked(false);
                    itemStateArray.put(adapterPosition, false);

                    priceDocument.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<DocumentSnapshot> task) {

                            if (task.isSuccessful()) {

                                DocumentSnapshot documentSnapshot = task.getResult();

                                if (documentSnapshot.exists()) {

                                    String oldPrice = task.getResult().getString("price");

                                    int priceInteger = Integer.parseInt(oldPrice) - Integer.parseInt(price);

                                    String finalPrice = Integer.toString(priceInteger);

                                    myCallback.priceListenerMethod(finalPrice);

                                    Map<String, Object> priceMap = new HashMap<>();
                                    priceMap.put("price", finalPrice);

                                    priceDocument.set(priceMap);

                                    /*
                                    Map<String, Object> orderMap = new HashMap<>();
                                    orderMap.put("image", image_url);
                                    orderMap.put("name", name);
                                    orderMap.put("size", size);
                                    orderMap.put("color", color);
                                    orderMap.put("price", price);
                                    orderMap.put("total", finalPrice);
                                    */

                                    // firebaseFirestore.collection("Orders").document(userID).collection("Order ID").document(order_id).delete();

                                    /*
                                    orderCallBack.orderListenerMethod("image_url: " + image_url);
                                    orderCallBack.orderListenerMethod("name: " + name);
                                    orderCallBack.orderListenerMethod("size: " + size);
                                    orderCallBack.orderListenerMethod("color: " + color);
                                    orderCallBack.orderListenerMethod("price_UNchecked: " + price);
                                    orderCallBack.orderListenerMethod("final_price_UNchecked: " + finalPrice);
                                    */

                                } else {

                                    firebaseFirestore.collection("Orders").document(userID).collection("Order ID").document(order_id).delete();
                                    Toast.makeText(context, order_id + " removed", Toast.LENGTH_SHORT).show();

                                }

                            }

                        }
                    });

                }

            }

        }

    });

Вы заметите, что я использую обратный вызов. Я попытался использовать его для отправки данных элемента в активность этого адаптера. Но я не знал как.

Любая помощь, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...