【发布时间】:2017-08-08 17:50:41
【问题描述】:
我正在尝试获取 Android 设备的内部存储路径。
由于大多数设备延迟返回内部存储路径使用Environment.getExternalStorageDirectory().getPath();,所以我使用它来获取路径。
一切正常,除了当我从非 Activity 类调用 Environment.getExternalStorageDirectory().getPath(); 时,它返回 null,而如果我从 Activity 类调用它,它返回正确的路径。
我尝试搜索其他帖子,但找不到任何有用的内容。
任何帮助将不胜感激。
编辑:
if(getExtSdCardPath(con)!=null)
{ path=getExtSdCardPath(con);
if(new File(path).getPath().equal(Environment.getExternalStorageDirectory().getPath())) // This line give null "Null Pointer exception"
{
return null;
}
return path;
}
我正在检查 SD 卡路径是否与 Environment.getExternalStorageDirectory().getPath() 返回的路径相同
【问题讨论】:
-
Environment.getExternalStorageDirectory()不涉及Context,因此其结果不应根据调用位置而改变。请提供minimal reproducible example,说明您如何使用Environment.getExternalStorageDirectory(),以及您如何确定它正在返回null。 -
@CommonsWare 我添加了一些额外的信息。你能看看吗?
-
我认为
path更可能是null,所以new File(path).getPath()是null。顺便说一句,new File(path).getPath()毫无意义——用path替换它会更快。而且,还要注意getExternalStorageDirectory()与大多数 Android 设备上的“ext sd card”关系不大。 -
@CommonsWare 在调用下一个代码之前,我正在检查分配给
path的值是否不为空getExtSdCardPath(con)!=null。然后我将值分配给路径。所以我觉得导致错误的唯一原因是Environment.getExternalStorageDirectory().getPath()。感谢您的建议,仅将new File(path).getPath()替换为path。 -
"我正在检查该值是否..." - 您假设对任何
getExtSdCardPath()的两次连续调用将返回相同的值。在您当前的实现中,如果第二次调用返回null,那么path将是null,您将在指定的行上获得NullPointerException。只调用一次getExtSdCardPath(),并检查path本身是否为null。
标签: java android file nullpointerexception null