Android 使用通用图像加载器保存和更新图像
已更新 如前所述,我使用了通用图像加载器。但是我得到了一些错误。 **这是我第一次玩这种东西 以下是我的代码: 以下是使用异步将位图保存到内部存储器的代码:Android 使用通用图像加载器保存和更新图像,android,caching,picasso,Android,Caching,Picasso,已更新 如前所述,我使用了通用图像加载器。但是我得到了一些错误。 **这是我第一次玩这种东西 以下是我的代码: 以下是使用异步将位图保存到内部存储器的代码: Uri uri = Crop.getOutput(result); try { bmp = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri); } catch (IOException e) {
Uri uri = Crop.getOutput(result);
try {
bmp = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
} catch (IOException e) {
e.printStackTrace();
}
finally {
new saveDpToDisk().execute(bmp);
}
class saveDpToDisk extends AsyncTask{
@Override
protected Object doInBackground(Object[] params) {
try {
fos = openFileOutput("ProPic", Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
bmp.compress(Bitmap.CompressFormat.JPEG, 60, fos);
return bmp;
}
}
下面是使用UIL从存储器加载图像的代码:
@Override
protected Object doInBackground(Object[] params) {
FileInputStream fis;
try {
fis = openFileInput("ProPic");
String uri = String.valueOf(fis);
DisplayImageOptions options = new DisplayImageOptions.Builder().cacheOnDisk(true).build();
ImageLoader loader = ImageLoader.getInstance();
loader.displayImage(uri, pro_pic, options);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return pro_pic;
}
}
这就是我得到的错误(应用程序不强制关闭,错误只是出现在logcat中)
UIL doesn't support scheme(protocol) by default [java.io.FileInputStream@42987180]. You should implement this support yourself (BaseImageDownloader.getStreamFromOtherSource(...))
java.lang.UnsupportedOperationException: UIL doesn't support scheme(protocol) by default [java.io.FileInputStream@42987180]. You should implement this support yourself (BaseImageDownloader.getStreamFromOtherSource(...))
at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromOtherSource(BaseImageDownloader.java:235)
at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:97)
at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.downloadImage(LoadAndDisplayImageTask.java:290)
at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryCacheImageOnDisk(LoadAndDisplayImageTask.java:273)
at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:229)
at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:135)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
________xx_______________________
原始问题
我的应用程序只需加载一个图像(用户可以从gallery中选择该图像,将其设置为该应用程序的dp)
因此,我所做的是使用FileOutputStream将所选pic保存到存储器中,然后在activity的onResume方法中使用FileInputStream加载pic
但是,当所选图片太大时,应用程序启动太慢(需要时间膨胀视图),logcat显示内存堆为30-60MB
因此,我想将图像存储在缓存中并加载,但并没有找到一种方法
我应该使用毕加索吗?如果是,如何使用它从缓存中保存和删除
或者还有其他方法可以满足我的需求吗?如果你读了Koush在G+上的帖子,你会得到清晰的解决方案,我总结了一下,Android Universal Image Loader是满足你需求的赢家
- 如果您正在使用网络,则具有最好的图像API
- +是最快的。玩这些 另外两个伟大的库确实强调了图像API 然而,它已经相当过时了
- 非常灵活;我非常喜欢他们的可插拔后端传输,
并且可能会在那里丢弃AndroidSync。请求优先级
取消管理非常好(如果您使用网络) - 是最受欢迎的一款
目前,高度可定制
- 如果您正在使用网络,则具有最好的图像API
- +是最快的。玩这些 另外两个伟大的库确实强调了图像API 然而,它已经相当过时了
- 非常灵活;我非常喜欢他们的可插拔后端传输,
并且可能会在那里丢弃AndroidSync。请求优先级
取消管理非常好(如果您使用网络) - 是最受欢迎的一款
目前,高度可定制
- 如果您正在使用网络,则具有最好的图像API
- +是最快的。玩这些 另外两个伟大的库确实强调了图像API 然而,它已经相当过时了
- 非常灵活;我非常喜欢他们的可插拔后端传输,
并且可能会在那里丢弃AndroidSync。请求优先级
取消管理非常好(如果您使用网络) - 是最受欢迎的一款
目前,高度可定制
- 如果您正在使用网络,则具有最好的图像API
- +是最快的。玩这些 另外两个伟大的库确实强调了图像API 然而,它已经相当过时了
- 非常灵活;我非常喜欢他们的可插拔后端传输,
并且可能会在那里丢弃AndroidSync。请求优先级
取消管理非常好(如果您使用网络) - 是最受欢迎的一款
目前,高度可定制
考虑到所有这些安卓通用图像加载器都符合您的要求(在本地磁盘上加载图像)!毕加索和其他库正在使用load im