如何从editText获取数字?

时间:2014-03-25 13:34:54

标签: android android-edittext

我想从editText中获取一个数字并在计算中使用,我的代码中没有任何错误,但我没有得到我想要的东西,r的值是alwayas 1,这里是代码:

public class Counter extends Activity {

    Button add, sub;
    TextView result;
    EditText range;
    double r;
    public double c=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_counter);

        add = (Button) this.findViewById(R.id.add);
        sub = (Button) this.findViewById(R.id.sub);
        result = (TextView) this.findViewById(R.id.result);
        range = (EditText) this.findViewById(R.id.range);

        try {
            r = new Double(range.getText().toString());
        } catch (NumberFormatException e) {
            r = 1; // your default value
        }

        add.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                c=c+r;
                result.setText(""+c);

            }
        }); 

        sub.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                c=c-r;
                result.setText(""+c);
            }
        });
    }

任何帮助??

8 个答案:

答案 0 :(得分:3)

        try {
            r = new Double(range.getText().toString());
        } catch (NumberFormatException e) {
            r = 1; // your default value
        }

您发布的代码片段是正确的。 Double有一个带String的构造函数。问题是你在findViewById之后执行它,并且EditText可能不包含任何内容。例如,当您按下add时,您可以再次检索EditText的内容并进行解析:

  add.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            try {
              r = new Double(range.getText().toString());
            } catch (NumberFormatException e) {
              r = 1; // your default value
             }
            c=c+r;
            result.setText(""+c);

        }
    }); 

答案 1 :(得分:2)

Double类提供了一个静态方法,它将字符串解析为double。

所以试着改变:

 r = new Double(range.getText().toString());

要:

 r = Double.parseDouble(range.getText().toString());

此外,您可能希望将其他字符串解析为其他类型的数字,例如整数:

 int x = Integer.parseInt(yourString);

答案 2 :(得分:0)

试试这个(解析字符串加倍):

  

r = Double.parseDouble(range.getText()。toString());

当用户点击按钮时,你应该从EditText获取价值,只有在onCreate()中它才会获得价值,它将在创建时从EditText获取数据

答案 3 :(得分:0)

您需要使用Double.parseDouble(range.getText().toString());

答案 4 :(得分:0)

你只需要这样做:

r = Double.parseDouble(range.getText().toString()); // Surround with try/catch for fancy functionality

答案 5 :(得分:0)

使用那样:

r=Double.parseDouble(range.getText().toString());

答案 6 :(得分:0)

您可以在XML文件中创建editText,以便它只接受数字

android:inputType="number"

和你的java代码

r = Double.parseDouble(range.getText().toString());

答案 7 :(得分:0)

试试这个:为了防止EditText中的String无法解析为double,我将它放在try-catch块中。

double r;
try {
    r =  Double.parseDouble(range.getText().toString());
catch (NumberFormatException ex) {
    r = 1;
}

希望这会有所帮助:)