Почему мое приложение Android закрывается принудительно, когда я пытаюсь проверить, имеет ли EditText двойной - PullRequest
0 голосов
/ 18 мая 2010
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, оно принудительно закрывается. Я не могу понять, что происходит. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 19 мая 2010

Используйте правильный тип: 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!
}
2 голосов
/ 18 мая 2010

Виновник почти наверняка 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...