trim()检查不起作用,应用程序崩溃 - Android

时间:2012-10-07 22:42:47

标签: android methods crash trim

我尝试了这段代码(相关部分......):

    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消息) 有任何想法吗 ?... 谢谢 ! : - (

3 个答案:

答案 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'测试,从而避免对空字符串进行数字测试