0
Scanner scanner = new Scanner(lapsPerMile_st);  
                if (!scanner.hasNextDouble()) {  
                    Context context = getApplicationContext();
                    String msg = "Please Enter Digits and Decmials Only";
                    int duration = Toast.LENGTH_LONG;
                    Toast.makeText(context, msg, duration).show();

                    lapsPerMileEditText.setText("");
                    return;
                } else {
                     //Edit box has only digits, Set data and display stats
                    data.setLapsPerMile(Integer.parseInt(lapsPerMile_st));

                    lapsRunLabel.setVisibility(0);
                    lapsRunTextView.setText(Integer.toString(data.getLapsRun()));

                    milesRunLabel.setVisibility(0);
                    milesRunTextView.setText(Double.toString(data.getLapsRun()/data.getLapsPerMile()));
                }


<EditText
android:id="@+id/mileCount"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginTop="110dp"
android:inputType="numberDecimal"
android:maxLength="4"
/>

出于某种原因,如果我输入一个非十进制数(例如 3 或 5),它可以正常工作,但是当我输入一个浮点数(例如 3.4 或 5.8)时,它会强制关闭。我似乎无法弄清楚发生了什么。有任何想法吗?

4

2 回答 2

2

使用正确的类型:Integer.parseInt, Float.ParseFloat, ... 并考虑到您使用的是 Java,因此如果其中一个解析失败,您将收到异常:NumberFormatException。

String int_string = "1";
int data = 0; // 0 as default value
try
{ 
    data = Integer.parseInt (int_string); 
} 
catch (NumberFormatException e)
{ 
    // You are trying to parse and int from a string that is not an int!
}
于 2010-05-19T14:34:25.510 回答
2

罪魁祸首几乎可以肯定parseInt。继续并使用 adb ( adb logcat -v time) 连接到您的设备以查看日志以及应用程序崩溃时生成的堆栈跟踪。

ParseInt 不喜欢任何非整数字符(IE 到了小数点就炸了)。

我建议使用 try-catch 来包围您的 parseInt 或 Parse"Anything" 方法。

接下来,您可能希望仅在布局 XML 中将允许的字符限制为整数类型: https ://developer.android.com/reference/android/widget/TextView.html#attr_android:numeric

于 2010-05-18T12:05:13.547 回答