试图读取字段“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) 个答案