我是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(""); } } }); } }
任何帮助将不胜感激。 谢谢,阿纳尔。
答案 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输出以查看是否抛出异常)。根据您提供的信息,我的猜测是:
findViewById返回null,然后您尝试使用返回值,从而导致NPE。
Integer.parseInt正在抛出异常。当它无法将字符串解析为数字时,它会这样做。你应该用try / catch检查它。
答案 2 :(得分:0)
您正在尝试解析onCreate
中EditText上的内容。我想此时EditText是空的,因此解析(如the javadoc中所示)会抛出NumberFormatException。我猜你应该只在用户提交时解析onClick方法中EditText的内容。
我不知道EditText是如何工作的,但如果允许用户在EditText中输入除整数之外的其他内容,则应捕获NumberFormatException以避免抛出异常。
请注意,您的两个代码段完全相同。第一个只是在解析它之前将EditText的内容存储在局部变量中。
答案 3 :(得分:0)
将heightInt
和weightInt
的分配移至onClickListener`
答案 4 :(得分:0)
运行应用程序, 在模拟器中,输入数字后应该没有空格
答案 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);