使用DiskLruCache

时间:2018-05-03 16:34:30

标签: java android nullpointerexception

当我使用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?

1 个答案:

答案 0 :(得分:0)

似乎你正在使用“context.getExternalCacheDir()”或“context.getCacheDir()”并在其上调用“.toPath()”而不检查它是否为null。
在调用“toPath()”之前添加对“context.getExternalCacheDir()!= null”的检查,以确保没有得到NullPointerException。