当我使用DiskLruCache时,我得到一个NullPointerException: 首先,我使用以下代码获得可用的缓存目录(如果可用,则为外部,否则为内部):
private static File getDiskCacheDir(Context context, String uniqueName) {
String cachePath;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
|| !Environment.isExternalStorageRemovable()) {
cachePath = context.getExternalCacheDir().getPath();
} else {
cachePath = context.getCacheDir().getPath();
}
return new File(cachePath + File.separator + uniqueName);
}
但是当我将我的应用程序上传到应用程序市场时,我收到错误:
java.lang.NullPointerException,尝试在空对象引用,DiskCacheManager.java,47上调用虚方法'java.lang.String java.io.File.getPath()'
在DiskCacheManager.java中,只有上面的方法有“getPath()”。 它可能导致NullPointerException?我该怎么办才能避免它?
抱歉,上面的方法用于以下功能,第47行是:
cachePath = context.getExternalCacheDir()。getPath();
private static DiskLruCache getDiskLruCache(Context context) {
DiskLruCache mDiskLruCache = null;
try {
File cacheDir = getDiskCacheDir(context, "prod");
if (!cacheDir.exists()) {
cacheDir.mkdirs();
}
mDiskLruCache = DiskLruCache.open(cacheDir, getAppVersion(context), 1, 60 * 1024 * 1024);
} catch (IOException e) {
e.printStackTrace();
}
return mDiskLruCache;
}
因为在测试期间发生崩溃,它可能在虚拟机中运行,这可能导致context.getExternalCacheDir()为null?
答案 0 :(得分:0)
似乎你正在使用“context.getExternalCacheDir()”或“context.getCacheDir()”并在其上调用“.toPath()”而不检查它是否为null。
在调用“toPath()”之前添加对“context.getExternalCacheDir()!= null”的检查,以确保没有得到NullPointerException。