BMI小程序的基本框架和功能在前面的两个版本中已经基本实现,为了让程序更有实用价值现在我们修改一下程序的EditText的属性配置,使之可以接受浮点数值,同时为了防止用户再输入时误将回车输入,新添加一个只允许输入单行的属性,由于输入属性的更改会有一些不合法的字符也会被允许输入,为了使程序更加稳健要做一个异常处理,并使用Toast将错误信息提示出来。
将string.xml文件添加一条输入错误的提示信息:
...
<string name="input_error">亲,是不是输出错了,只能输入数字哦!</string>
修改EditText的属性设置后的布局文件activity_main.xml:
...
<EditText
android:id="@+id/tt1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/tt1"
android:singleLine="true"
/>
...
<EditText
android:id="@+id/tt2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/tt2"
android:singleLine="true"
/>
...
主程序的修改如下MainActivity.java:
...
/**
*1.2
*现在程序无法接受小数型的数据
*为了是程序更加实用
*修改EditText的配置属性
*使之可以输入小数型数据
*由于改变了输入属性之后
*输入的数据可能是非数值
*型的数据而身高和体重的输入
*只可能数值型的数据所以要使用try..catch
*做一个容错的处理
*这里采用Toast来对输入错误进行提示
* */
...
//为程序添加事件
public void addEvent(){
bt1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
DecimalFormat df = new DecimalFormat("0.0");
try{
//获取身高
height = Double.parseDouble(tt1.getText().toString())/100;
//获取体重
weight = Double.parseDouble(tt2.getText().toString());
//计算BMI的值
double BMI = weight/(height*height);
bmi_Result.setText("your BMI is:" + df.format(BMI));
//根据BMI结果值,选择应该提示的建议
if(BMI > 25){
bmi_Suggest.setText(R.string.advice_heavy);
}else if(BMI < 20){
bmi_Suggest.setText(R.string.advice_light);
}else{
bmi_Suggest.setText(R.string.advice_average);
}
}catch(Exception e){
//这里的第一个参数的输入要注意不能简单的写成this,因为它这里的this是当前匿名类对象,它将会报错
//所以在以后有类似参数传递时最好的书写方法就是将类名一块带上保证不会出错
//Toast.makeText(MainActivity.this, "亲,是不是输出错了,只能输入数字哦!", Toast.LENGTH_SHORT).show();
//为了让字符串可以统一的进行管理,可以将提示信息配置在string.xml文件中
Toast.makeText(MainActivity.this, R.string.input_error, Toast.LENGTH_SHORT).show();
}
}
});
}
这里有一点编程是要注意的地方,就是当你在匿名类中使用Toast来提示信息时,所传的第一个参数不能习惯的写成是this,这将会报错,原因很简单我就不说了,只是有时候coding的时候不注意,所以建议大家在所有传this的做参数的方法中,最好的办法就是在this前加上所属的类名,这样只要逻辑不出错就能保证不会出错了。