我正在创建一个通过EditText
小部件接收基本用户输入(来自键盘)的 Android 应用程序。我在OnItemSelected
函数中为我Activity
的Spinners
. 我正在从我的EditText
(进行适当的类型转换)中收集双精度值,并且应用程序崩溃了。我的 logcat 报告错误是 "" 不是一个合适的double
值,这意味着在EditText
仍然为空的时候调用了这个函数(我猜是Spinners
在创建时的初始选择Activity
)。Android Studio 在通话中警告我这个可能的异常:
方法调用 'inputView.getText().toString()' 可能会产生 'java.lang.NullPointerException' less... (Ctrl+F1) 此检查报告指定检查范围内始终为真或假的条件,以及根据代码的数据流分析,指出可能引发 RuntimeException 的位置。此检查还报告 Nullable/NotNull 合同违规。可以配置支持合约的注解(默认使用来自 annotations.jar 的 @Nullable/@NotNull 注解)
我已经附加了我的 logcat 消息以及导致类型问题的可疑代码段之一,将相关段加粗。
日志猫:
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)
代码段:
TextView resultView = (TextView) findViewById(R.id.resultView);
EditText inputView = (EditText)findViewById(R.id.haveTextField);
factor = getFactorFromTable();
double input = Double.parseDouble(**inputView.getText().toString()**);
resultView.setText(Double.toString(input * factor));
关于如何解决和洞察为什么会发生这种情况的任何想法?谢谢