- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用DiskLruCache
缓存图像的 url。我使用 AsyncTask
下载图像像这样:
new AsyncTask<String, String, String>() {
String path = null;
@Override
protected String doInBackground(String... params) {
// Get the assets from DiskLruCache
try {
if (url != null)
path = assetManager.getAssetFilePath(url);
} catch (IOException e) {
callback.downloadFailed();
}
return path;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (path != null)
callback.assetDownloaded(path);
else
callback.downloadFailed();
}
}.execute();
AssetManager
是一个调用方法 getAssetFilePath(...)
的自定义帮助器类。异常发生在这段代码中:
DiskLruCache.Snapshot snapshot = mDiskCache.get(key);
if (snapshot == null) {
DiskLruCache.Editor editor = mDiskCache.edit(key);
InputStream is = downloadFile(url);
if (is == null) return null;
// EXCEPTION OCCURS HERE
OutputStream os = editor.newOutputStream(0);
byte[] buffer = new byte[1024 * 10];
int len;
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
is.close();
os.close();
editor.commit();
}
具体来说,这里的这一行会导致异常:
OutputStream os = editor.newOutputStream(0);
我似乎无法在我的任何测试设备上重复此问题,但其他用户也会出现此问题。
此问题的原因是什么?我该如何解决它?
logcat 告诉我:
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.OutputStream com.jakewharton.disklrucache.DiskLruCache$Editor.newOutputStream(int)' on a null object reference
有更好的方法吗?
这也是初始化DiskLruCache
的好方法吗? ?如果不是,那么什么是良好的可扩展初始化?寻找最佳实践和实现。
public CacheManager() {
BASE_PATH = Environment.getExternalStorageDirectory().getPath() + "/exampleapp";
try {
mDiskCache = DiskLruCache.open(new File(BASE_PATH), VERSION, 1, CACHE_SIZE);
} catch (IOException e) {
Log.i(TAG, "Asset Manager IOException");
e.printStackTrace();
}
}
最佳答案
可能
DiskLruCache.Editor editor = mDiskCache.edit(key);
已经为空 - 但您不检查它。由于 mDiskCache.get(key)
已经返回 null,因此检查似乎合理?
关于java - 从 DiskLruCache 访问 OutputStream 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34426130/
我在这个实现中使用 JakeWharton 的 DiskLruCache:Using DiskLruCache in android 4.0 does not provide for openCach
我是 SO 新手,也是 Android 编程新手!如果问题很微不足道,请原谅我。 无论如何,我正在尝试创建一个图库应用程序,它将显示文件夹中所有媒体文件(视频和图片)的缩略图。我的应用程序运行良好,除
这是我正在关注的磁盘缓存教程。我已将源代码下载到 DiskLruCache,但源代码中不存在本示例中使用的所有方法。 http://developer.android.com/training/dis
我想在我基于 API 级别 7+ 的 Android 应用程序中使用 Jake Wharton 的 DiskLruCache。我会在我的 ListView 中使用它来缓存 SdCard 上下载的图像,
我想在我的项目中使用 DiskLruCache,如 Caching Bitmaps 中所述。 ,但无法导入正确的库。 在哪里可以找到包含此类的 jar? 按照 similar questions 中的
我正在使用 Jake Wharton's DiskLruCache图书馆。 我对应用程序性能、缓存策略以及在 View 中和整个应用程序中使用缓存感到好奇。大多数时候,图像不会改变。 例如,假设我的服
我正在尝试使用 jake wharton DiskLruCache 库实现基于磁盘的图像 lru 缓存。 link to library .我正在使用 here 中的代码 fragment . 我遇到
我收到此错误 java.lang.IllegalArgumentException:键必须匹配正则表达式 [a-z0-9_-]{1,64}:“mision_imposible_–_rogue_nati
我正在尝试在我的 Android 应用程序中使用 Jake Wharton 的 DiskLruCache,但我似乎无法弄清楚如何使用缓存正确序列化和反序列化对象。在基本命令行 Java 程序中使用以下
这与 this 有关关于 Volley 图像缓存的问题。所以,现在我想实现 DiskLruCache,但我不确定该怎么做。 我从 github 下载了 Jar 文件并将其添加到我的项目中。 接下来我该
我正在使用DiskLruCache缓存图像的 url。我使用 AsyncTask 下载图像像这样: new AsyncTask() { String path = null;
在我的 Android 应用程序中,我想在磁盘上缓存图像,然后这些图像将显示在 WebView 中。 ,为此我需要通过某种路径或 URI 访问文件。 (为了使用 。)我发现的所有缓存实现都不提供对绝
我正在尝试在一个新的 Android 项目中测试这个缓存库。 当我运行项目时,我得到这个 Logcat: 01-24 03:45:31.109: E/AndroidRuntime(1983): FAT
有人在 DiskLruCache 上工作过吗? http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html 提
我正在尝试构建 Xamarin.Forms 项目,但出现此错误: Severity Code Description Project File Line Suppression
我是一名优秀的程序员,十分优秀!