Android:从服务器下载图像并将其保存在设备缓存中
我已经通过以下链接 在从服务器加载图像后,我按照下面的教程来缓存图像 我的代码段是:Android:从服务器下载图像并将其保存在设备缓存中,android,caching,hashmap,filenotfoundexception,Android,Caching,Hashmap,Filenotfoundexception,我已经通过以下链接 在从服务器加载图像后,我按照下面的教程来缓存图像 我的代码段是: private Bitmap getBitmap(String url) { // PhotoToLoad photoToLoad = new PhotoToLoad(url, new ImageView(a)); // String filename = photoToLoad.url; //String filename = url; String
private Bitmap getBitmap(String url) {
// PhotoToLoad photoToLoad = new PhotoToLoad(url, new ImageView(a));
// String filename = photoToLoad.url;
//String filename = url;
String filename = String.valueOf(url.hashCode());
Log.v("TAG FILE :", filename);
File f = new File(cacheDir, filename);
// Is the bitmap in our cache?
Bitmap bitmap = BitmapFactory.decodeFile(f.getPath());
if (bitmap != null)
return bitmap;
else {
// Nope, have to download it
try {
bitmap = BitmapFactory.decodeStream(new URL(url)
.openConnection().getInputStream());
// save bitmap to cache for later
writeFile(bitmap, f);
return bitmap;
} catch (FileNotFoundException ex) {
ex.printStackTrace();
Log.v("FILE NOT FOUND", "FILE NOT FOUND");
return null;
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
}
}
private void writeFile(Bitmap bmp, File f) {
FileOutputStream out = null;
try {
out = new FileOutputStream(f);
bmp.compress(Bitmap.CompressFormat.PNG, 80, out);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null)
out.close();
} catch (Exception ex) {
}
}
}
我收到FileNotFoundException
:
11-12 15:19:25.495: VERBOSE/cacheDir(266): /sdcard/data/BalajeeBazaar
11-12 15:19:26.035: VERBOSE/TAG FILE :(266): -951166081
11-12 15:19:26.315: WARN/System.err(266): java.io.FileNotFoundException: /sdcard/data/BalajeeBazaar/-951166081
11-12 15:19:26.315: WARN/System.err(266): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:231)
11-12 15:19:26.315: WARN/System.err(266): at java.io.FileOutputStream.<init>(FileOutputStream.java:96)
11-12 15:19:26.315: WARN/System.err(266): at java.io.FileOutputStream.<init>(FileOutputStream.java:69)
11-12 15:19:26.315: WARN/System.err(266): at com.ecommerce.balajeebazaar.CacheImages.writeFile(CacheImages.java:160)
11-12 15:19:26.315: WARN/System.err(266): at com.ecommerce.balajeebazaar.CacheImages.getBitmap(CacheImages.java:142)
11-12 15:19:26.315: WARN/System.err(266): at com.ecommerce.balajeebazaar.CacheImages.access$0(CacheImages.java:125)
11-12 15:19:26.315: WARN/System.err(266): at com.ecommerce.balajeebazaar.CacheImages$PhotosLoader.run(CacheImages.java:77)
11-12 15:19:26.325: WARN/dalvikvm(266): threadid=17: thread exiting with uncaught exception (group=0x4001aa28)
11-12 15:19:26.325: ERROR/AndroidRuntime(266): Uncaught handler: thread Thread-10 exiting due to uncaught exception
11-12 15:19:26.325: ERROR/AndroidRuntime(266): java.lang.ClassCastException: android.graphics.Bitmap
11-12 15:19:26.325: ERROR/AndroidRuntime(266): at com.ecommerce.balajeebazaar.CacheImages$PhotosLoader.run(CacheImages.java:79)
11-12 15:19:25.495:VERBOSE/cacheDir(266):/sdcard/data/balajeebazar
11-12 15:19:26.035:详细/标记文件:(266):-951166081
11-12 15:19:26.315:WARN/System.err(266):java.io.FileNotFoundException:/sdcard/data/balajeebazar/-951166081
11-12 15:19:26.315:WARN/System.err(266):位于org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:231)
11-12 15:19:26.315:WARN/System.err(266):位于java.io.FileOutputStream.(FileOutputStream.java:96)
11-12 15:19:26.315:WARN/System.err(266):位于java.io.FileOutputStream.(FileOutputStream.java:69)
11-12 15:19:26.315:WARN/System.err(266):位于com.ecommerce.balajeebazar.CacheImages.writeFile(CacheImages.java:160)
11-12 15:19:26.315:WARN/System.err(266):位于com.ecommerce.balajeebazar.CacheImages.getBitmap(CacheImages.java:142)
11-12 15:19:26.315:WARN/System.err(266):在com.ecommerce.balajeebazaar.CacheImages.access$0(CacheImages.java:125)
11-12 15:19:26.315:WARN/System.err(266):在com.ecommerce.balajeebazar.CacheImages$photoloader.run(CacheImages.java:77)
11-12 15:19:26.325:WARN/dalvikvm(266):threadid=17:线程以未捕获异常退出(组=0x4001aa28)
11-12 15:19:26.325:错误/AndroidRuntime(266):未捕获处理程序:线程10由于未捕获异常而退出
11-12 15:19:26.325:ERROR/AndroidRuntime(266):java.lang.ClassCastException:android.graphics.Bitmap
11-12 15:19:26.325:ERROR/AndroidRuntime(266):在com.ecommerce.balajeebazar.CacheImages$photoloader.run(CacheImages.java:79)
请指导我如何解决这个问题
谢谢~在堆栈跟踪中,它显示了一个文件未找到异常。我见过当文件夹不存在时发生这种情况。是你先创造的吗。或者,您可以使用上面提到的缓存或外部文件夹 在堆栈跟踪中,它显示一个文件未找到异常。我见过当文件夹不存在时发生这种情况。是你先创造的吗。或者,您可以使用上面提到的缓存或外部文件夹 您是否正确定义了目录名 可能您没有正确声明目录名 那么,你能检查一下它是否正常吗
//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(),"YourDirectoryName");
else
cacheDir=context.getCacheDir();
if(!cacheDir.exists())
cacheDir.mkdirs();
}
检查您的类,确保您的路径正确或其他任何内容,然后告诉我。您是否正确定义了目录名 可能您没有正确声明目录名 那么,你能检查一下它是否正常吗
//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(),"YourDirectoryName");
else
cacheDir=context.getCacheDir();
if(!cacheDir.exists())
cacheDir.mkdirs();
}
检查您的课程,确保您的路径正确或其他任何内容,然后告诉我。您是否已将添加到清单中:?在这里尝试这个对我有用的项目:您是否已将添加到您的清单:?试试这个对我有用的项目:是的,这是我犯错误的地方,谢谢你的回答是的,这是我犯错误的地方,谢谢你的回答