Android - проблема при добавлении чисел в облачный пожарный магазин - PullRequest
0 голосов
/ 01 июля 2019

Все работало нормально, пока я не добавил вторую валюту. Я написал код, который работал, когда флажок элемента отмечен, его цена добавляется в пожарный магазин (и, если существует какое-либо другое значение, они добавляются друг с другом).

Это код, который я использовал, и он работал:

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

            final int adapterPosition = holder.getAdapterPosition();

            if (firebaseUser != null) {

                userID = firebaseUser.getUid();

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

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

                    priceUSDCallBack.priceUSDListenerMethod(priceUSD);
                    priceLBPCallBack.priceLBPListenerMethod(priceLBP);

                    checkPrice(priceUSD, priceLBP);

                } else {

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

                    priceUSDCallBack.priceUSDListenerMethod(priceUSD);
                    priceLBPCallBack.priceLBPListenerMethod(priceLBP);

                    checkPrice(priceUSD, priceLBP);

                    ordersDocument.delete();

                }

            }

        }

    });

И метод checkPrice:

private void checkPrice(final String priceUSD, final String priceLBP) {

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

    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 oldPriceUSD = task.getResult().getString("price_usd");
                    String oldPriceLBP = task.getResult().getString("price_lbp");

                    int priceIntegerUSD = Integer.parseInt(priceUSD) + Integer.parseInt(oldPriceUSD);
                    int priceIntegerLBP = Integer.parseInt(priceLBP) + Integer.parseInt(oldPriceLBP);

                    String finalPriceUSD = Integer.toString(priceIntegerUSD);
                    String finalPriceLBP = Integer.toString(priceIntegerLBP);

                    priceUSDCallBack.priceUSDListenerMethod(finalPriceUSD);
                    priceLBPCallBack.priceLBPListenerMethod(finalPriceLBP);

                    Map<String, Object> priceMap = new HashMap<>();
                    priceMap.put("price_usd", finalPriceUSD);
                    priceMap.put("price_lbp", finalPriceLBP);

                    priceDocument.set(priceMap);

                } else {

                    String oldPriceUSD = task.getResult().getString("price_usd");
                    String oldPriceLBP = task.getResult().getString("price_lbp");

                    int priceIntegerUSD = Integer.parseInt(oldPriceUSD) - Integer.parseInt(priceUSD);
                    int priceIntegerLBP = Integer.parseInt(oldPriceLBP) - Integer.parseInt(priceLBP);

                    String finalPriceUSD = Integer.toString(priceIntegerUSD);
                    String finalPriceLBP = Integer.toString(priceIntegerLBP);

                    priceUSDCallBack.priceUSDListenerMethod(finalPriceUSD);
                    priceLBPCallBack.priceLBPListenerMethod(finalPriceLBP);

                    Map<String, Object> priceMap = new HashMap<>();
                    priceMap.put("price_usd", finalPriceUSD);
                    priceMap.put("price_lbp", finalPriceLBP);

                    priceDocument.set(priceMap);

                }

            }

        }
    });

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

Я получаю эту ошибку в LogCat:

0:38:08.611 15213-15213/ga.jayp.tlos E/AndroidRuntime: FATAL EXCEPTION: main
Process: ga.jayp.tlos, PID: 15213
java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Integer.java:483)
    at java.lang.Integer.parseInt(Integer.java:556)
    at ga.jayp.tlos.CartRecyclerAdapter$2.onComplete(CartRecyclerAdapter.java:264)
    at com.google.android.gms.tasks.zzj.run(Unknown Source)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6126)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

И щелчок по этому ga.jayp.tlos.CartRecyclerAdapter$2.onComplete(CartRecyclerAdapter.java:264) отправляет курсор на этот int priceIntegerUSD = Integer.parseInt(oldPriceUSD) - Integer.parseInt(priceUSD);. Или это дает мне что-то вроде Для входной строки: "8.08" и цена товара в долларах США, считанная из пожарного магазина.

Кто-нибудь знает, в чем проблема? И любая помощь, пожалуйста, будет оценена.

РЕДАКТИРОВАТЬ: Я думаю, я нашел ошибку: если значение в firestore является десятичным, я получаю эту ошибку. Иначе, если число натуральное, ошибки нет.

1 Ответ

0 голосов
/ 01 июля 2019

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

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