我有一个问题,我的Android应用程序的一部分在Android版本4.1.2上正常工作,但在android 4.4.3上执行相同的部分时抛出NullPointerException。我的最小sdk设置为15,目标sdk为21.请找到以下代码:
try {
FileInputStream towe = new FileInputStream(path2);
re = new BufferedReader(new InputStreamReader(towe));
while ((res = re.readLine()) != null) {
result.append(res);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
re.close(); //ERROR IS GENERATED AT THIS LINE
} catch (IOException e) {
e.printStackTrace();
}
}
早上的人们,离开了一会儿。事实证明,由于文件路径,异常被抛出。我已经对android 4.1.2的路径进行了硬编码,但在4.4.3中,即使设备是相同的,路径也是不同的。我最终使用了
一 ndroid.os.Environment.getExternalStorageDirectory();
方法。现在两者都很好。感谢您的建议
答案 0 :(得分:2)
从多个角度来看,这是写这个的正确方法:
try (FileInputStream towe = new FileInputStream(path2);
Reader re = new BufferedReader(new InputStreamReader(towe))) {
while ((res = re.readLine()) != null) {
result.append(res);
}
}
如果您不使用 try-with-resources ,那么您需要在re
块中测试finally
是否为空,以避免NPE。看起来像错误的堆栈跟踪和异常挤压一样。
try {
FileInputStream towe = new FileInputStream(path2);
re = new BufferedReader(new InputStreamReader(towe));
while ((res = re.readLine()) != null) {
result.append(res);
}
} finally {
if (re != null) {
re.close();
}
}
即便如此,理论上存在towe
不会被关闭的风险。 (提示:Error
子类。)
Android 4.4.3上的NullPointerException但不是4.1.2
最有可能的意思是new FileInputStream(path2);
在一个平台上抛出异常(可能是某种IOException
而不是另一个平台。线索很可能出现在I / O异常的消息中。