Android App在小数点输入到EditText时崩溃

时间:2013-10-12 01:36:51

标签: android android-edittext textview android-spinner

我正在创建一个Android应用,通过EditText小部件接收基本用户输入(来自键盘)。我在我OnItemSelected Activity的{​​{1}}函数中调用的行中遇到了一些顽固的行为。我正在从Spinners收集双倍值(进行适当的类型转换),然后应用程序崩溃了。我的logcat报告错误是“”不是一个合适的EditText值,这意味着在double仍为空时调用此函数(我猜测的是初始选择的创建EditTextSpinners。 Android Studio在通话中警告我这个可能的例外:

  

方法调用'inputView.getText()。toString()'可能会产生'java.lang.NullPointerException'较少...(Ctrl + F1)   此检查报告指定检查范围中始终为true或false的条件,并根据代码的数据流分析指出可能抛出RuntimeException的位置。此检查还报告Nullable / NotNull合同违规。可以配置支持合同的注释(默认情况下,@ Nullable / @NotNull将使用annotations.jar中的注释)

我已经添加了我的logcat消息以及导致类型问题的一个可疑代码段,加粗了相关的段。

logcat的

Activity

代码段:

10-12 01:18:22.244    1148-1148/khandy.application.convertible E/AndroidRuntime: FATAL EXCEPTION: main
**java.lang.NumberFormatException: Invalid double: ""**
at java.lang.StringToReal.invalidReal(StringToReal.java:63)
at java.lang.StringToReal.parseDouble(StringToReal.java:248)
at java.lang.Double.parseDouble(Double.java:295)
at **khandy.application.convertible.EntryActivity.onItemSelected(EntryActivity.java:160)**
at android.widget.AdapterView.fireOnSelected(AdapterView.java:892)
at android.widget.AdapterView.access$200(AdapterView.java:49)
at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:860)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

有关如何修复和洞察其原因的任何想法?感谢

1 个答案:

答案 0 :(得分:1)

  

(我猜测在创建活动时最初选择了微调器)

这是对的。 OnItemSelected()首次启动时会调用Activity。因此,如果此时EditText为空,那么您将获得例外。

  

有关如何修复和洞察其原因的任何想法?

你有很多选择来规避这个。你可以在那里放一个默认值,比如说0.0,根据你的应用对值的影响你可能不想这样做。您可以创建boolean标志作为成员变量。默认情况下将此变量设置为true,然后将其更改为false中的onItemSelected()。然后检查onItemSelected(),如果标志为true,则不运行代码。

另一种选择是检查EditText是否为空

if (!"".equals(inputView)
{
    // run your code
}
else
{
     // do nothing or display message indicating that nothing is entered
}

无论你做什么,都应该将它包装在try/catch中或进行一些错误检查,如果输入无效,则采取适当的措施。