java.lang.NumberFormatException: недопустимый int: "130 PHP"

Я не знаю, как решить эту проблему

я не могу найти свою ошибку в кодах

Пожалуйста, помогите мне решить:(спасибо!

 private void loadListFood()
{
    cart = new Database(this).getCarts();
    adapter = new CartAdapter(cart,this);
recyclerView.setAdapter(adapter);

int total = 0;
for(Order order:cart)
    total+=(Integer.parseInt(order.getPrice()))*(Integer.parseInt(order.getQuantity()));
    Locale locale = new Locale("en", "US");
    NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);

    txtTotalPrice.setText(fmt.format(total));


}

меня перенаправляют на сумму +=(Integer.parseInt(order.getPrice()))*(Integer.parseInt(order.getQuantity()));

вот мои коды адаптера

public class CartAdapter extends RecyclerView.Adapter<CartViewHolder>

{private List listData = new ArrayList<> ();

private Context context;

public CartAdapter(List<Order> cart, Cart cart1)
{
}


@Override
public CartViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View itemView = inflater.inflate(R.layout.cartlayout,parent,false);
    return new CartViewHolder(itemView);
}

@Override
public void onBindViewHolder(CartViewHolder holder, int position) {
    TextDrawable drawable = TextDrawable.builder()
            .buildRound(""+listData.get(position).getQuantity(), Color.RED);
    holder.img_cart_count.setImageDrawable(drawable);


    int price = (Integer.parseInt(listData.get(position).getPrice()))*(Integer.parseInt(listData.get(position).getQuantity()));
    holder.txt_price.setText(price);
    holder.txt_cart_name.setText(listData.get(position).getProductName());


}

@Override
public int getItemCount() {
    return listData.size();
}

}

1 ответ

Решение

Из JavaDoc: метод Integer.parseInt(String s) бросает NumberFormatException

если строка не содержит анализируемого целого числа.

Это значит, метод order.getPrice() или же order.getQuantity() возвращается "130 PHP" который не является действительным Integer,

Ваша настоящая проблема может быть: почему метод возвращает String и не Integer потому что вы должны разобрать String сейчас. Довольно подвержен ошибкам и плохой практике.

Если ваш элемент GUI (или что-то еще) не соответствует Integer, по крайней мере, удалите свой "PHP" из поля ввода, и вы сможете разобрать String без манипулирования им с помощью некоторых вспомогательных методов String.

class  CartViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
    , View.OnCreateContextMenuListener {

    public TextView txt_cart_name,txt_price;
    public ImageView img_cart_count;

    private ItemClickListener itemClickListener;

    public void setTxt_cart_name(TextView txt_cart_name) {
        this.txt_cart_name = txt_cart_name;
    }

    public CartViewHolder(View itemView) {
        super(itemView);

        txt_cart_name = (TextView)itemView.findViewById(R.id.cart_item_name);
        txt_price = (TextView)itemView.findViewById(R.id.cart_item_Price);
        img_cart_count = (ImageView)itemView.findViewById(R.id.cart_item_count);

        itemView.setOnCreateContextMenuListener(this);

    }

    @Override
    public void onClick(View view) {

    }

    @Override
    public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenu.ContextMenuInfo contextMenuInfo) {

        contextMenu.setHeaderTitle("Selecione uma Ação");
        contextMenu.add(0,0,getAdapterPosition(),Common.DELETE);
    }
}

public class CartAdapter extends RecyclerView.Adapter<CartViewHolder> {

    private List<Order> listData = new ArrayList<>();
    private Context context;

    public CartAdapter(List<Order> listData, Context context) {
        this.listData = listData;
        this.context = context;
    }

    @Override
    public CartViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View itemView = inflater.inflate(R.layout.cart_layout,parent,false);
        return new CartViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(CartViewHolder holder, int position) {
        TextDrawable drawable = TextDrawable.builder()
                .buildRound(""+listData.get(position).getQuantity(), Color.BLUE);
        holder.img_cart_count.setImageDrawable(drawable);

        Locale locale = new Locale("pt","BR");
        NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
        int price = (Integer.parseInt(listData.get(position).getPrice()))*(Integer.parseInt(listData.get(position).getQuantity()));
        holder.txt_price.setText(fmt.format(price));

        holder.txt_cart_name.setText(listData.get(position).getProductName());


    }


    @Override
    public int getItemCount() {
        return listData.size();
    }
}
Другие вопросы по тегам