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时,它会强制关闭。我似乎无法弄清楚最近发生了什么。有什么想法吗?
答案 0 :(得分:2)
罪魁祸首几乎可以肯定parseInt
。继续使用adb(adb logcat -v time
)连接到您的设备,以查看日志,以及应用崩溃时生成的堆栈跟踪。
ParseInt不喜欢任何非整数字符(I.E.它在点击小数点时发生轰炸)。
我建议使用try-catch来包围你的parseInt或Parse“Anything”方法。
接下来,您可能希望仅在布局XML中将允许的字符限制为整数类型: https://developer.android.com/reference/android/widget/TextView.html#attr_android:numeric
答案 1 :(得分: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!
}