【发布时间】:2016-10-26 10:56:44
【问题描述】:
我正在使用 GridView 加载包含图像的 json 数据。当我构建项目时,它发生了一些异常
AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
FileCache 类:
public class FileCache {
private File cacheDir;
public FileCache(Context context) {
// Find the dir to save cached images
if (android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED))
cacheDir = new File(
android.os.Environment.getExternalStorageDirectory(),
"JsonParseTutorialCache");
else
cacheDir = context.getCacheDir();
if (!cacheDir.exists())
cacheDir.mkdirs();
}
public File getFile(String url) throws IOException {
String filename = String.valueOf(url.hashCode());
// String filename = URLEncoder.encode(url);
File f = new File(cacheDir, filename);
f.createNewFile();
return f;
}
public void clear() {
File[] files = cacheDir.listFiles();
if (files == null)
return;
for (File f : files)
f.delete();
}
}
Logcat:
W/System.err: java.io.IOException: open failed: ENOENT (No such file or directory)
W/System.err: at java.io.File.createNewFile(File.java:939)
W/System.err: at com.totoroads.android.app.FileCache.getFile(FileCache.java:33)
W/System.err: at com.totoroads.android.app.ImageLoader.getBitmap(ImageLoader.java:64)
W/System.err: at com.totoroads.android.app.ImageLoader.access$000(ImageLoader.java:29)
W/System.err: at com.totoroads.android.app.ImageLoader$PhotosLoader.run(ImageLoader.java:155)
W/System.err: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err: at java.lang.Thread.run(Thread.java:818)
W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
W/System.err: at libcore.io.Posix.open(Native Method)
W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
W/System.err: at java.io.File.createNewFile(File.java:932)
W/System.err: ... 9 more
我想在 GridView 上下载、读取和显示图像,如何修复这些异常?
【问题讨论】:
-
"/storage/emulated/0/JsonParseTutorialCache/-1068682472" 我认为这不是图像的有效文件路径。您应该检查是否正确获取文件名。
-
我通过参数获取图片是:TAG_ICONNAME="image"(from json)
-
请也发布一个示例 json 响应。
-
@TheAbsurd:我更新了更多 FileCache 类和 JSON,请在上面查看