有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

试图读取字段“java”。lang.反对安卓。util。一对首先

我有一个加号和减号按钮用于购买门票,所以当我点击加号时,我会向地图数据添加我购买的类型门票的数量,反之亦然,当点击减号按钮时。但在一些按钮上有这样的问题,当我在第二位置和第三位置点击按钮时,会出现这样的错误:

        java.lang.NullPointerException: Attempt to read from field 'java.lang.Object 安卓.util.Pair.first' on a null object reference
        at ru.myapp.PaymentFragment.itemClicked(PaymentFragment.java:243)
        at ru.myapp.Adapters.PaymentAdapter$2.onClick(PaymentAdapter.java:101)
        at 安卓.view.View.performClick(View.java:5156)
        at 安卓.view.View$PerformClick.run(View.java:20755)
        at 安卓.os.Handler.handleCallback(Handler.java:739)
        at 安卓.os.Handler.dispatchMessage(Handler.java:95)
        at 安卓.os.Looper.loop(Looper.java:145)
        at 安卓.app.ActivityThread.main(ActivityThread.java:5832)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
        at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

我的代码是这样的,我在片段中进行加减运算:

   private Map<Integer, Pair<String, Integer>> tickets = new ConcurrentHashMap<>();

    public void itemClicked(View view, int position, String operation) {
    PaymentData paymentData = mArrayList.get(position);
    int counter;
    int ticket = Integer.parseInt(paymentData.getmPrice());
    if("plus".equals(operation)) {
        if(tickets.containsKey(ticket)) {
            Pair<String, Integer> value = tickets.get(ticket);
            tickets.put(ticket, Pair.create(value.first, value.second + 1));
            for ( int key : tickets.keySet() ) {
                counter = tickets.get(key).second;
                Log.e("TICKETS", key + " " + counter);
                counter *= key;
                priceForTV += counter;
            }
        } else {
            counter = 1;
            tickets.put(ticket, Pair.create(paymentData.getmTicketID(), counter));
            for ( int key : tickets.keySet() ) {
                counter = tickets.get(key).second;
                counter *= key;
                priceForTV += counter;
            }
        }
    } else {
        if(tickets.containsKey(ticket)) {
            for ( int key : tickets.keySet() ) {
                Pair<String, Integer> value = tickets.get(ticket);
                tickets.put(ticket, Pair.create(value.first, value.second - 1));
                counter = tickets.get(key).second;
                if(counter > 0) {
                    counter *= key;
                    priceForTV += counter;
                } else if(counter == 0)  {
                    tickets.remove(key);
                } else {
                    tickets.remove(key);
                }
            }
        } else {
            for ( int key : tickets.keySet() ) {
                counter = tickets.get(key).second;
                counter *= key;
                priceForTV += counter;
            }
        }
    }
    mPriceTextView.setText(String.valueOf(priceForTV));
    priceForTV = 0;

    getActivity().invalidateOptionsMenu();
}

加减按钮位于适配器中:

holder.plusButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(clickListener != null) {
                clickListener.itemClicked(v, position, "plus");
            }

            int price = Integer.parseInt(holder.countTV.getText().toString());
            price += 1;
            if(price > 0) {
                holder.countTV.setText(String.valueOf(price));
                holder.countTV.setTextColor(mContext.getResources().getColor(R.color.redText));
            }

        }
    });
    holder.minusButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(clickListener != null) {
                clickListener.itemClicked(v, position, "minus");
            }

            int price = Integer.parseInt(holder.countTV.getText().toString());
            if(price != 0) {
                price -= 1;
                holder.countTV.setText(String.valueOf(price));
                if(price == 0) {
                    holder.countTV.setTextColor(mContext.getResources().getColor(R.color.greyText));
                }
            }
        }
    });

我猜我犯了一些错误,就是找不到,请帮帮我:C


共 (0) 个答案