EditText到Int

时间:2012-01-06 18:15:43

标签: java android integer android-edittext int

我是Java和Android开发的新手,所以我决定创建一个简单的应用程序,它包含两个字段,并将它们放在一个简单的数学方程式中。但是我必须先将EditText转换为Int才能用它们进行任何数学运算,对吗? 在XML文件中,我已将EditTexts设置为android:inputType =" number"。 我的尝试是这样的:

  final EditText height = (EditText) findViewById (R.id.height);
  String heightString = height.getText().toString();
  final int heightInt = Integer.parseInt(heightString);

  final EditText height = (EditText) findViewById (R.id.height);
  final int heightInt = Integer.parseInt(height.getText().toString());

我在两种情况下都尝试过Integer.valueOf,但是当我运行它时它总是强制关闭我的应用程序,如果我注释掉int heightInt它不会强行关闭。

这里是整个代码:

  

package com.body.calculator;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class bmi extends Activity {
     /** Called when the activity is first created. */



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final TextView results = (TextView) findViewById(R.id.results);
    final EditText height = (EditText) findViewById (R.id.height);
    String heightString = height.getText().toString();
    final int heightInt = Integer.parseInt(heightString);
    final EditText weight = (EditText) findViewById (R.id.weight);
    final Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    Button submit_bmi = (Button) findViewById(R.id.submit_bmi);
    submit_bmi.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            if (height.getText().toString().equals("") && weight.getText().toString().equals("")) {
                results.setText("Both fields are empty");
                vib.vibrate(100);
            }
            else if (height.getText().toString().equals("")) {
                results.setText("Height is empty");
                vib.vibrate(100);
            }
            else if (weight.getText().toString().equals("")) {
                results.setText("Weight is empty");
                vib.vibrate(100);
            }
            else {
            results.setText("");    
            }
        }


    });

}
}

任何帮助将不胜感激。 谢谢,阿纳尔。

6 个答案:

答案 0 :(得分:5)

你接近

  final EditText height = (EditText) findViewById (R.id.height);
  String heightString = height.getText().toString();
  final int heightInt = Integer.parseInt(heightString);

是正确的,但您直接在onCreate方法中调用此方法。这意味着即使在用户能够执行任何操作之前,应用程序启动时也会立即调用它们。因为这个值总是空的,只是因为用户甚至还没有做任何改变。

当你在onClick中使用这些值时(这是正确的),由于它们的早期初始化,它们仍然是空的。

尝试放置这部分:

String heightString = height.getText().toString();
final int heightInt = Integer.parseInt(heightString);

直接在onClick方法开始之后但在if/else语句之前,如下:

public void onClick(View v) {
    String heightString = height.getText().toString();
    final int heightInt = Integer.parseInt(heightString);

           // Your statements

  }

答案 1 :(得分:0)

许多事情都可能发生(要知道究竟是什么,你可以查看logcat输出以查看是否抛出异常)。根据您提供的信息,我的猜测是:

  1. findViewById返回null,然后您尝试使用返回值,从而导致NPE。

  2. Integer.parseInt正在抛出异常。当它无法将字符串解析为数字时,它会这样做。你应该用try / catch检查它。

答案 2 :(得分:0)

您正在尝试解析onCreate中EditText上的内容。我想此时EditText是空的,因此解析(如the javadoc中所示)会抛出NumberFormatException。我猜你应该只在用户提交时解析onClick方法中EditText的内容。

我不知道EditText是如何工作的,但如果允许用户在EditText中输入除整数之外的其他内容,则应捕获NumberFormatException以避免抛出异常。

请注意,您的两个代码段完全相同。第一个只是在解析它之前将EditText的内容存储在局部变量中。

答案 3 :(得分:0)

heightIntweightInt的分配移至onClickListener`

答案 4 :(得分:0)

我解决了同样的问题, 把这些行放在try和catch块中      String heightString = height.getText()。toString();     final int heightInt = Integer.parseInt(heightString);

运行应用程序, 在模拟器中,输入数字后应该没有空格

答案 5 :(得分:0)

btnFirst.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                double num1,num2,res;
                num1 = Double.valueOf(editFirst.getText().toString());
                num2 = Double.valueOf(editSecond.getText().toString());
                res = num1 + num2;
                result.setText(""+res);