我尝试了这段代码(相关部分......):
private EditText weightEditText,heightEditText;
weightEditText = (EditText)findViewById(R.id.weightEditText);
heightEditText = (EditText)findViewById(R.id.heightEditText);
public void onClick(View v) {
switch (v.getId()){
case R.id.clear: clearFields();toastClearingMessage(); break;
case R.id.goButton: runGoButton(); break;
}//switch
}
private void runGoButton() {
if (heightWeightFieldsValuesGood() && heightWeightFieldsNotEmpty() )
runCalculations();
else
toastMessageReEnterValues();
}
private boolean heightWeightFieldsValuesGood() {
if (getWeight()>0 && getHeight()>0)
return true;
return false;
}
private boolean heightWeightFieldsNotEmpty(){
if ( (weightEditText.getText().toString().trim().equals("")) || (heightEditText.getText().toString().trim().equals("")) )
return false;
return true;
}
private float getHeight() {
return Float.parseFloat(heightEditText.getText().toString());
}
private float getWeight() {
return Float.parseFloat(weightEditText.getText().toString());
}
崩溃日志:
10-08 01:21:54.260: W/dalvikvm(8172): threadid=1: thread exiting with uncaught exception (group=0x40020ac0)
10-08 01:21:54.260: E/AndroidRuntime(8172): FATAL EXCEPTION: main
10-08 01:21:54.260: E/AndroidRuntime(8172): java.lang.NumberFormatException:
10-08 01:21:54.260: E/AndroidRuntime(8172): at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:305)
10-08 01:21:54.260: E/AndroidRuntime(8172): at java.lang.Float.parseFloat(Float.java:291)
10-08 01:21:54.260: E/AndroidRuntime(8172): at com.example.bmi.calculator.MainPage.getWeight(MainPage.java:122)
10-08 01:21:54.260: E/AndroidRuntime(8172): at com.example.bmi.calculator.MainPage.heightWeightFieldsValuesGood(MainPage.java:75)
10-08 01:21:54.260: E/AndroidRuntime(8172): at com.example.bmi.calculator.MainPage.runGoButton(MainPage.java:63)
10-08 01:21:54.260: E/AndroidRuntime(8172): at com.example.bmi.calculator.MainPage.onClick(MainPage.java:58)
10-08 01:21:54.260: E/AndroidRuntime(8172): at android.view.View.performClick(View.java:2420)
10-08 01:21:54.260: E/AndroidRuntime(8172): at android.view.View$PerformClick.run(View.java:8941)
10-08 01:21:54.260: E/AndroidRuntime(8172): at android.os.Handler.handleCallback(Handler.java:587)
10-08 01:21:54.260: E/AndroidRuntime(8172): at android.os.Handler.dispatchMessage(Handler.java:92)
10-08 01:21:54.260: E/AndroidRuntime(8172): at android.os.Looper.loop(Looper.java:123)
10-08 01:21:54.260: E/AndroidRuntime(8172): at android.app.ActivityThread.main(ActivityThread.java:4627)
10-08 01:21:54.260: E/AndroidRuntime(8172): at java.lang.reflect.Method.invokeNative(Native Method)
10-08 01:21:54.260: E/AndroidRuntime(8172): at java.lang.reflect.Method.invoke(Method.java:521)
10-08 01:21:54.260: E/AndroidRuntime(8172): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-08 01:21:54.260: E/AndroidRuntime(8172): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-08 01:21:54.260: E/AndroidRuntime(8172): at dalvik.system.NativeStart.main(Native Method)
一切运行得很好,但是如果我点击GO按钮而不插入任何字段值,程序就会崩溃并关闭......虽然我正在使用trim()方法......
顺便说一句,如果我为两个字段输入零值,它就可以正常工作(相应的Toast消息) 有任何想法吗 ?... 谢谢 ! : - (
答案 0 :(得分:1)
你使用toString()错误,你应该在editText的getText()方法上调用它,而不是在编辑文本本身上调用它
另外,你应该比较“”,而不是''
在这种情况下,trim()是不必要的
应该是这样的:
weightEditText.getText()。toString()。equals(“”)...
<<<<<<编辑>>>>>>>>>
private boolean heightWeightFieldsNotEmpty(){
if ( (weightEditText.getText().toString().equals("")) || (heightEditText.getText().toString().equals("")) )
return false;
return true;
}
<<<<<<<编辑2>>>>>>>>>>
if (heightWeightFieldsNotEmpty() && heightWeightFieldsValuesGood())
private float getHeight(){
Float from_value;
try{
from_value = Float.parseFloat(heightEditText.getText().toString());
} catch (NumberFormatException ex){
from_value = 0.0f;
}
return from_value;
}
答案 1 :(得分:1)
您可以使用TextUtils简化一些代码。
private boolean heightWeightFieldsNotEmpty(){
if (TextUtils.isEmpty(weightEditText.getText()) || TextUtils.isEmpty(heightEditText.getText() )) {
return false;
}
return true;
}
然后使用runGoButton()
方法:
private void runGoButton() {
// Reverse these since you need to check for empty first.
if (heightWeightFieldsNotEmpty() && heightWeightFieldsValuesGood())
runCalculations();
else
toastMessageReEnterValues();
}
答案 2 :(得分:0)
空字符串(如果已修剪)将不等于包含空格字符的字符串 - 从两个等于检查中删除空格
此外,在尝试将值转换为数字之前,应检查字段是否为空。即你的支票应该是:
if (heightWeightFieldsNotEmpty() && heightWeightFieldsValuesGood())
注意:我还删除了极端的 == true ,因为它们不是正确性所必需的,并且它们对代码的兼容性没有任何补充。通过首先放置'notEmpty'测试,如果失败,代码将不会尝试运行'valuesGood'测试,从而避免对空字符串进行数字测试