jhc*_*jhc 1 java eclipse android nullpointerexception
我很乐意从第二只眼睛那里得到一些帮助,因为我一直在努力找出我的代码有什么问题.
在Eclipse IDE中,我试图实现一个谷歌地图的活动,从资产的文件夹(文件读取seaship MMSI码/assets/mmsi.txt),并增加了地图标记,以它们各自的位置.我能够使用BufferedReader该类从该文件中读取,但是在String使用该Double.parseDouble函数将结果行转换为double 时遇到问题.
LogCat检测到以下问题.
01-23 17:59:11.672: E/AndroidRuntime(18242): FATAL EXCEPTION: main
01-23 17:59:11.672: E/AndroidRuntime(18242): java.lang.RuntimeException: Unable to resume activity {com.aquamet.saramap/com.aquamet.saramap.MainActivity}: java.lang.NullPointerException
01-23 17:59:11.672: E/AndroidRuntime(18242): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)
01-23 17:59:11.672: E/AndroidRuntime(18242): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)
01-23 17:59:11.672: E/AndroidRuntime(18242): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)
01-23 17:59:11.672: E/AndroidRuntime(18242): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-23 17:59:11.672: E/AndroidRuntime(18242): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-23 17:59:11.672: E/AndroidRuntime(18242): at android.os.Handler.dispatchMessage(Handler.java:99)
01-23 17:59:11.672: E/AndroidRuntime(18242): at android.os.Looper.loop(Looper.java:123)
01-23 17:59:11.672: E/AndroidRuntime(18242): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-23 17:59:11.672: E/AndroidRuntime(18242): at java.lang.reflect.Method.invokeNative(Native Method)
01-23 17:59:11.672: E/AndroidRuntime(18242): at java.lang.reflect.Method.invoke(Method.java:521)
01-23 17:59:11.672: E/AndroidRuntime(18242): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
01-23 17:59:11.672: E/AndroidRuntime(18242): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
01-23 17:59:11.672: E/AndroidRuntime(18242): at dalvik.system.NativeStart.main(Native Method)
01-23 17:59:11.672: E/AndroidRuntime(18242): Caused by: java.lang.NullPointerException
01-23 17:59:11.672: E/AndroidRuntime(18242): at com.aquamet.saramap.MainActivity.getMMSI(MainActivity.java:173)
01-23 17:59:11.672: E/AndroidRuntime(18242): at com.aquamet.saramap.MainActivity.setupRegion(MainActivity.java:136)
01-23 17:59:11.672: E/AndroidRuntime(18242): at com.aquamet.saramap.MainActivity.onResume(MainActivity.java:82)
01-23 17:59:11.672: E/AndroidRuntime(18242): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
01-23 17:59:11.672: E/AndroidRuntime(18242): at android.app.Activity.performResume(Activity.java:3827)
01-23 17:59:11.672: E/AndroidRuntime(18242): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
01-23 17:59:11.672: E/AndroidRuntime(18242): ... 12 more
Run Code Online (Sandbox Code Playgroud)
换句话说,以下代码中似乎存在NullPointerException:
private double[] getMMSI() throws IOException {
AssetManager am = this.getAssets();
double[] mmsi = null;
BufferedReader br = null;
try {
InputStream file_stream = am.open("mmsi.txt");
br = new BufferedReader(new InputStreamReader(file_stream));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String line;
for (int i=0; (line = br.readLine()) != null; i++) {
// Following line seems to be the problem (line 173).
mmsi[i] = Double.parseDouble(line);
}
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,虽然调试变量line实际上不是null!(抱歉没有足够的REP图像)
调试截图
另一个SO用户遇到了类似的问题,但他的变量似乎确实被初始化了. parseDouble在我的代码中抛出空指针[关闭]
Jon*_*eet 12
Double.parseDouble不是问题.你的任务是:
double[] mmsi = null;
...
// mssi is still null...
mmsi[i] = Double.parseDouble(line);
Run Code Online (Sandbox Code Playgroud)
您永远不会为其分配非空值mmsi,因此在您尝试写入时会出现错误.如果您想进一步证明这一点,请将您的代码拆分为:
double tmp = Double.parseDouble(line);
mmsi[i] = tmp;
Run Code Online (Sandbox Code Playgroud)
你会看到异常发生在第二行,而不是第一行.
鉴于你不知道你需要多少行,我建议你ArrayList改用:
List<Double> mmsi = new ArrayList<Double>();
...
mmsi.add(Double.valueOf(line));
Run Code Online (Sandbox Code Playgroud)
编辑:此外,您应该在一个finally块中关闭您的文件.目前,如果您在阅读时抛出异常,则将文件保持打开状态.而且你当前的catch块实现并没有像抛出异常一样有用,IMO.
| 归档时间: |
|
| 查看次数: |
2362 次 |
| 最近记录: |