0

I need to display the Total of all item prices in my Cart Activity in "subtotal" I still get an error :

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(double)' on a null object reference

I think it's because the subtotal declaration is wrong, but I don't know why..

my code :

public class CartAdapter extends RecyclerView.Adapter<CartAdapter.CartViewHolder>
{

    Context context ;
    private List<Cart> cartList;
    private double price;

    public CartAdapter(Context context, List<Cart> cartList) {
        this.context = context;
        this.cartList = cartList;

    }

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

    @Override
    public void onBindViewHolder(@NonNull CartViewHolder holder, final int position) {

        double price = (Double.parseDouble(String.valueOf(cartList.get(position).price)) 
                            * Double.parseDouble(cartList.get(position).amount));

        holder.cart_menu_amount.setText(new StringBuilder(cartList.get(position).amount).append(" x"));
        holder.menu_name.setText(cartList.get(position).name);
        // holder.menu_price.setText((new StringBuilder(String.valueOf(cartList.get(position).price))));
        holder.menu_price.setText(new StringBuilder(String.valueOf(price)).append(" €"));

        double subTotal = 0;
        subTotal += (Double.parseDouble(String.valueOf(cartList.get(position).price)) 
                        * Double.parseDouble(cartList.get(position).amount));

        holder.total_price_cart.setText((int) subTotal);
    }

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

    public class CartViewHolder extends RecyclerView.ViewHolder {

        TextView menu_name;
        TextView menu_price;
        TextView cart_menu_amount;
        TextView total_price_cart;

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

            total_price_cart = (TextView)itemView.findViewById(R.id.total_price_cart);
            menu_name = (TextView)itemView.findViewById(R.id.cart_name);
            menu_price= (TextView)itemView.findViewById(R.id.cart_price);
            cart_menu_amount= (TextView) itemView.findViewById(R.id.cart_menu_amount);
        }
    }
}

In the class MenuDetail,I get informations like item name, item price, item amount :

Button btn_add_cart = (Button) findViewById(R.id.btn_add_cart);
    btn_add_cart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            try {

                Cart cartItem = new Cart();
                cartItem.name = menu_name.getText().toString();
                cartItem.price = menu_price.getText().toString();
                cartItem.amount = menu_amount.getNumber();
                cartItem.comment = edit_comment.getText().toString();
                //  Common.toppingAdded.add(menu_name.getText().toString());
                // Common.cartPrice+=Double.parseDouble(optionList.get(position).Price);
                double price = (Double.parseDouble((String) menu_price.getText()) 
                                    * Double.parseDouble(String.valueOf(menu_amount.getNumber())));
                double finalPrice = price;
                cartItem.totalPrice = finalPrice;
                // Add to DB
                Common.cartRepository.insertToCart(cartItem);

                Log.d("NOW_DEBUG", new Gson().toJson(cartItem));
                Toast.makeText(MenuDetail.this, "Ajouté !", Toast.LENGTH_SHORT).show();
            } catch (Exception ex)

            {
                Toast.makeText(MenuDetail.this, ex.getMessage(), Toast.LENGTH_SHORT).show();
            }
            (MenuDetail.this).finish();
        }

    }
Android77
  • 9
  • 3

1 Answers1

1

Check for textView where you are setting subtotal using debugger probably it is not attached to your xml view. Also change

holder.total_price_cart.setText((int) subTotal);

to

holder.total_price_cart.setText(String.valueOf(subTotal));

type expected in settext method is of string.

Hope it helps.

Sahil
  • 952
  • 1
  • 7
  • 14