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などの10進数以外の数値を入力すると正常に機能しますが、3.4や5.8などの浮動小数点を入力すると強制的に閉じます。何が起こっているのか理解できないようです。何か案は?

4

2 に答える 2

2

犯人はほぼ間違いなくparseIntです。先に進み、adb(adb logcat -v time)を使用してデバイスに接続し、ログと、アプリがクラッシュしたときに生成されたスタックトレースを表示します。

ParseIntは、整数以外の文字を好みません(つまり、小数点に達すると爆撃します)。

try-catchを使用して、parseIntメソッドまたはParse"Anything"メソッドを囲むことをお勧めします。

次に、許可される文字をレイアウトXML内でのみ整数型に制限することができます: https ://developer.android.com/reference/android/widget/TextView.html#attr_android:numeric

于 2010-05-18T12:05:13.547 に答える
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 に答える