在我的应用程序中,我使用以下代码:
final String cachePath = Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||
!Environment.isExternalStorageRemovable() ? getExternalCacheDir(context).getPath()
: context.getCacheDir().getPath();
上面的代码在Android版本的lolipop上运行正常,但是在API级别21上我得到了以下错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getPath()' on a null object reference
任何建议将不胜感激。提前谢谢。
答案 0 :(得分:4)
看看你发布的代码,你自己做对了吗?:
final String cachePath = Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||
!Environment.isExternalStorageRemovable() ? getExternalCacheDir(context).getPath()
: context.getCacheDir().getPath();
您在Android中遇到了最常见的错误,NullPointerException
:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getPath()' on a null object reference
您在不检查getPath()
的情况下两次致电null
。
试试这个:
String cachePath; // you still need a default value if not mounted
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || !Environment.isExternalStorageRemovable()) {
if (getExternalCacheDir(context) != null) {
cachePath = getExternalCacheDir(context).getPath(); // most likely your null value
}
} else {
if (context.getCacheDir() != null) {
cachePath = context.getCacheDir().getPath();
}
}
答案 1 :(得分:1)
在哪种情况下失败了?文档说getExternalCacheDir返回null是可能的。 http://developer.android.com/reference/android/content/Context.html#getExternalCacheDir%28%29