编辑文本解析整数android

时间:2018-06-25 19:32:52

标签: java android

我正在制作android应用,并且我已编辑了两个用于增加和减少按钮的文本 enter image description here

,当我第一次单击增大或减小按钮时,它不起作用,但从第二次开始起作用 例如,如果编辑文本字段中的数字在我按增加时为50,而在我再次按增加时仍为50,则它更改为51,然后再次更改为52,依此类推 这是我的两个按钮的Java代码

 add.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            if (quantityEdit.getText().toString().equals("") || quantityEdit.getText().toString() == null) {
                quantityEdit.setText("0");
            } else {
                int a = Integer.parseInt(quantityEdit.getText().toString());
                int b = a + 1;

                quantityEdit.setText(String.valueOf(b));
            }

        }
    });

    sub.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            int a = Integer.parseInt(quantityEdit.getText().toString());

            if (a >= 1) {
                int b = a - 1;

                quantityEdit.setText(String.valueOf(b));
            } else {

                quantityEdit.setText("0");
            }
        }
    });

2 个答案:

答案 0 :(得分:0)

您似乎在检查“ add”中是否为空字符串或null,而不是“ sub”中。如Michael Krause所述,您应该使用TextUtils.isEmpty(),并在执行添加或子操作之前设置默认值。

如果您要在其他地方设置默认值,请显示代码。

答案 1 :(得分:0)

考虑像这样重构代码

add.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        quantityEdit.setText(String.valueOf(getIntVal(quantityEdit) + 1));
    }
});

sub.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        int value = getIntVal(quantityEdit);
        if (value > 0) {
            value--;
        }
        quantityEdit.setText(String.valueOf(value));
    }
});

// helper method to get the integer value of a TextView
private int getIntVal(TextView textView) {
    CharSequence rawValue = textView.getText();
    int value;
    if (!TextUtils.isEmpty(rawValue)) {
        try {
            value = Integer.parseInt(rawValue.toString());
        } catch (NumberFormatException e) {
            value = 0; 
            // TODO log / notify user
        }
    } else {
        value = 0;
    }
}

通过这种方式,您的初始化可以在一个地方进行处理,而且更加清楚。

无论如何,您的第一个条件是错误的。尝试访问该对象(它是向后的)后,您需要执行空检查。您检查过日志了吗?这可能会引发一个空值异常,并导致第一次点击“丢失”。