修剪()检查不使用';无法工作和应用程序崩溃-Android

修剪()检查不使用';无法工作和应用程序崩溃-Android,android,methods,crash,trim,Android,Methods,Crash,Trim,我尝试了以下代码(相关部分): 事故日志: 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.

我尝试了以下代码(相关部分):

事故日志:

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消息) 有什么想法吗?。。。
谢谢-(

空字符串如果被修剪,将不等于包含空格字符的字符串-从两个相等检查中删除空格

此外,在尝试将值转换为数字之前,您应检查字段是否为空。即,您的检查应为:

if (heightWeightFieldsNotEmpty() && heightWeightFieldsValuesGood())
注意:我还去掉了extronus==true,因为正确性不需要它们,它们也没有增加代码的可读性。通过先进行“notEmpty”测试,如果失败,代码将不会尝试运行“valuesGood”测试,从而避免对使用toString()的空字符串进行数字测试错误,应该在editText的getText()方法上调用它,而不是在editText本身上调用它

此外,您应该与“”进行比较,而不是与“”

在这种情况下,修剪()无效

应该是这样的:

weightEditText.getText().toString()等于(“”

>>>

>>>


您可能可以使用简化一些代码

然后在
runGoButton()方法中:

private void runGoButton() {
        // Reverse these since you need to check for empty first.
        if (heightWeightFieldsNotEmpty() && heightWeightFieldsValuesGood())
            runCalculations();
        else
            toastMessageReEnterValues();
}

根据我更新的答案,代码可能在进入空测试之前就失败了,因为您首先尝试在fieldsquote上进行数字测试:“我还去掉了多余的==true”:我知道:-)绝望的一刻。。。。但这两种方法都不起作用……事实上,我怀疑Rowland和dor506已经确定了修剪检查总是失败的原因——因为您得到的是对对象的引用,而不是实际值,字符串将始终包含文本。我认为,在所有答案中,我们可能已经发现了问题…:pI用我的getters编辑我的问题,你能写下我应该使用的固定高度权重字段试探()方法吗?@Adam请看编辑。如果它仍然崩溃,您还有其他问题,您需要发布崩溃日志。我更改了它,但现在我使用toString两次,在Getter和HeightWeightFieldsNofetty()上。。仍然crashes@Adam标记第一行,然后使用Shift+左键单击标记最后一行,复制它(Ctrl+C)和过去(Ctrl+V)here@Adam请参阅下一次编辑,您应该首先检查空文本,然后检查好的值。还使用try和cache包装getter,以防止另一次意外的崩溃
   private boolean heightWeightFieldsNotEmpty(){
    if ( (weightEditText.getText().toString().equals("")) || (heightEditText.getText().toString().equals("")) )
        return false;
    return true;
}
    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;
    }
private boolean heightWeightFieldsNotEmpty(){
        if (TextUtils.isEmpty(weightEditText.getText()) || TextUtils.isEmpty(heightEditText.getText() )) {
            return false;
        }
        return true;
 }
private void runGoButton() {
        // Reverse these since you need to check for empty first.
        if (heightWeightFieldsNotEmpty() && heightWeightFieldsValuesGood())
            runCalculations();
        else
            toastMessageReEnterValues();
}