android API级别21中的Nullpointer异常

时间:2015-03-26 10:06:52

标签: android

在我的应用程序中,我使用以下代码:

 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

任何建议将不胜感激。提前谢谢。

2 个答案:

答案 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