【问题标题】:Getting error: Caused by: java.lang.NumberFormatException: For input string: ""出现错误:原因:java.lang.NumberFormatException:对于输入字符串:“”
【发布时间】:2021-04-06 17:34:19
【问题描述】:

我有两个EditText,从中我得到Integer'数量'和'速率'的值,然后我将这个Integer值设置为TextView名称'数量'。

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

   
     

每当用户输入汇率时,我都会使用TextWatcher on rate,该值将设置为TextView Amount。但我得到NumberFormatException 输入字符串:“”。

【问题讨论】:

标签: android android-studio textwatcher


【解决方案1】:

在使用之前,您没有检查String 是否为空。由于你是初学者,我会尽量为你保持简单。请记住,您需要检查String 是否为空,然后您可以将其用于其他目的。

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

【讨论】:

  • 然后将其标记为正确答案。它会帮助我。 :)
【解决方案2】:
   int getRate=Integer.parseInt(rate.getText().toString());
   int getQty=Integer.parseInt(rate.getText().toString());

上面的 getRategetQty 变量将为空,因为编辑文本将为空,因为此代码为在用户输入值之前执行。

解决方案:

  • 从函数中,afterTextChanged(Editable s)使用下面的代码通过编辑文本从用户那里动态获取值。
   s.getText().toString()
  • 添加isempty()函数检查编辑文本是否为空,避免null异常。

【讨论】:

    猜你喜欢
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多