Android学习之BMI1.2

本文详细阐述了如何优化BMI计算器的用户输入体验,包括实现浮点数输入、限制单行输入、添加异常处理机制及错误提示,确保程序在用户输入非预期数值时能给出明确反馈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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前加上所属的类名,这样只要逻辑不出错就能保证不会出错了。

 

 

转载于:https://my.oschina.net/pzsoftchen/blog/69802

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值