#android #datepicker
#Android #datepicker
Вопрос:
Я смог воспроизвести в эмуляторах Android 1.5, 1.6, 2.0 и 2.1 следующее поведение: скопируйте текст «241299999999999999» из любого EditText
представления; перейдите к любому средству выбора даты (например, настройки даты и времени) и вставьте это значение в качестве года или месяца.
Приложение, использующее DatePicker
сбой, со следующей трассировкой стека:
10-24 15:50:54.674: E/AndroidRuntime(1012): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(1012): java.lang.NumberFormatException: unable to parse '241299999999999999' as integer
at java.lang.Integer.parse(Integer.java:390)
at java.lang.Integer.parseInt(Integer.java:374)
at java.lang.Integer.parseInt(Integer.java:333)
at com.android.internal.widget.NumberPicker.getSelectedPos(NumberPicker.java:379)
at com.android.internal.widget.NumberPicker.access$1100(NumberPicker.java:37)
at com.android.internal.widget.NumberPicker$NumberRangeKeyListener.filter(NumberPicker.java:362)
at com.android.internal.widget.NumberPicker$NumberPickerInputFilter.filter(NumberPicker.java:316)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:417)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28)
at android.widget.TextView.onTextContextMenuItem(TextView.java:6932)
at android.widget.TextView$MenuHandler.onMenuItemClick(TextView.java:6853)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:133)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:813)
at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:120)
at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:884)
at android.widget.AdapterView.performItemClick(AdapterView.java:283)
at android.widget.ListView.performItemClick(ListView.java:3132)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1620)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3948)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
at dalvik.system.NativeStart.main(Native Method)
Это известная ошибка?
Ответ №1:
Предполагая, что целое число занимает 4 байта, максимальное значение, которое оно может принять, равно
2^32 = 4,294,967,296.
вы указали значение, выходящее за пределы диапазона, чтобы распознать его как целое число.
Комментарии:
1. Безусловно, logcat говорит: «невозможно проанализировать ‘241299999999999999’ как целое число»!
2. Я знаю, что он не должен распознавать его как целое число, но разве он не должен быть защищен от этого случая? Я думаю, что сбой в этом случае не является желаемым поведением
Ответ №2:
У меня этого не происходит; на моем Samsung Fascinate (2.2) он даже не позволяет мне вставлять или вводить такое большое число.
Комментарии:
1. Да, похоже, Google исправил проблему в Android 2.2
2. Я должен научиться читать. 🙂 Вы остановились на 2.1 в своем сообщении. Я сейчас исчезну. 😛