-1

I dont know how to solve this problem

i cant find my error in codes

pls help me solve it :( thanks!

 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));


}

i am being redirected to total+=(Integer.parseInt(order.getPrice()))*(Integer.parseInt(order.getQuantity()));

here is my adapter codes

public class CartAdapter extends RecyclerView.Adapter<CartViewHolder>{
    private List<Order> 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();
    }
}
Kingsley
  • 14,398
  • 5
  • 31
  • 53
Mary
  • 35
  • 1
  • 9

2 Answers2

1

From JavaDoc: The method Integer.parseInt(String s) throws a NumberFormatException

if the string does not contain a parsable integer.

That means, method order.getPrice() or order.getQuantity() returns "130 PHP" which is not a valid Integer.

Your real problem might be: Why the method returns a String and not Integer because you have to parse your String now. Pretty error prone and bad practice.

If your GUI element (or whatever) does not fit with Integer, at least remove your "PHP" out of the input field and you might be able to parse your String without manipulate it with some String helper methods.

M_I
  • 132
  • 5
  • i removed the PHP from the prices of my items from my database but still getting the same error :( – Mary Mar 16 '18 at 15:20
  • Verify that your method `order.getPrice()` return `"130"` and not something like `"130 "`. `"130"` is parsable, `"130 "` is not. – M_I Mar 16 '18 at 15:53
  • How can I do that? Thank you – Mary Mar 16 '18 at 16:12
  • [Debug](https://developer.android.com/studio/command-line/adb.html) your App or `System.out.println()` your variables. – M_I Mar 19 '18 at 08:50
0
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();
    }
}
Avinash Singh
  • 4,970
  • 8
  • 20
  • 35