androidandroid-studiotextwatcher

Getting error: Caused by: java.lang.NumberFormatException: For input string: ""


I have two EditText from which I am getting Integer values of 'quantity' and 'rate' and then I am setting this Integer value to TextView names 'Amount'.

    private MilkViewModel milkViewModel;
    private DatePickerDialog datePickerDialog;
    private Button dateButton,submit;
    private EditText dateText;
    private MaterialDatePicker materialDatePicker;
    private Spinner shift_spinner;
    private ImageView imageView;
   public RadioGroup rg;

    private EditText fat;
    private EditText snf;
    public EditText rate;
    public EditText qty;
    private TextView amount;

    private RadioButton rb;
    private String getDate,getShift,getType;
    private int getSnf=0;
    private int getRate;
    private int getQty;


 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dateText=findViewById(R.id.date_picker_et);
        shift_spinner = (Spinner) findViewById(R.id.shift_spinner);
        rg=(RadioGroup)findViewById(R.id.radioGroup);

        snf=(EditText)findViewById(R.id.snf);
        rate=(EditText)findViewById(R.id.rate);
        fat=(EditText)findViewById(R.id.fat);
        amount= (TextView) findViewById(R.id.amount);
        final TextView amount = findViewById(R.id.amount);

        qty=(EditText)findViewById(R.id.qty);
        submit=(Button)findViewById(R.id.submit);


       // int getAmount = Integer.parseInt(amount.getText().toString());
        int getRate=Integer.parseInt(rate.getText().toString());
        int getQty=Integer.parseInt(qty.getText().toString());


        rate.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {

                amount.setText(Integer.toString(getRate*getQty));
                Toast.makeText(MainActivity.this, ""+amount, Toast.LENGTH_SHORT).show();
            }
        });

   
     

I am using TextWatcher on rate whenever the user enter the rate the value will be set to the TextView Amount. But I am getting NumberFormatException for input string: "".


Solution

  • You are not checking the String if it is empty or not before using it. Since you are beginner I will try to keep it simple for you. Just keep in mind that you need to check for not empty String then you can use it for other purpose.

    rate.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
        }
    
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
    
        }
    
        @Override
        public void afterTextChanged(Editable s) {
            String tempRate = rate.getText().toString();
            String tempQty = qty.getText().toString();
    
            if (tempRate != null && !tempRate.isEmpty() && !tempRate.equals("null") && tempQty != null && !tempQty.isEmpty() && !tempQty.equals("null")) {
                int getRate=Integer.parseInt(rate.getText().toString());
                int getQty=Integer.parseInt(qty.getText().toString());
            }
            amount.setText(Integer.toString(getRate*getQty));
            Toast.makeText(MainActivity.this, ""+amount, Toast.LENGTH_SHORT).show();
        }
    });