@Override
public void onBindViewHolder(final ViewHolder holder ,int position) {
Glide.with(c)
.load(images.get(position))
.placeholder(R.mipmap.ic_launcher)
.into(holder.img);
holder.img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try{
String fileName = "bitmap.png";
FileOutputStream stream = c.openFileOutput(fileName,Context.MODE_PRIVATE);
Intent showBigPicture = new Intent(c,showBigPicture.class);
Bitmap bitmapImage = BitmapFactory.decodeFile(images.get(position));
bitmapImage.compress(Bitmap.CompressFormat.PNG,100,stream);
stream.close();
bitmapImage.recycle();
showBigPicture.putExtra("image",fileName);
c.startActivity(showBigPicture);
}catch (Exception e){
e.printStackTrace();
}
}
});
}
这在logCat中显示“无法解码流:java.io.FileNotFoundException:android.support.v7.widget.AppCompatImageView {e22d977 V.ED..C .... P .... 0,0- 540,890#7f0b0061 app:id / img}:open failed:ENOENT(没有这样的文件或目录)“
答案 0 :(得分:0)
我相信你想关注this answer保存位图图像。我相信你得到FileNotFoundException的原因是因为你提供了一个文件,该文件尚未存在于decodeFile函数中,而这个文件很可能是我所知道的URL。简而言之,要保存位图:
File(filename)
FileOutputStream
File
FileOutputStream
从我的问题可以推测,看起来你在RecyclerView中显示图像,当点击图像时,你想要打开另一个显示完整图像版本的活动。如果这与您的用例很接近,并且您正在使用Glide,我建议利用其内置的自动缓存功能来减少网络呼叫,而不是手动保存文件。
默认情况下,只要使用相同的文件名,路径或URL获取每个Glide.load(...)
上的图像,就会在Glide中启用磁盘和基于内存的缓存。如果您想操纵缓存的发生方式,请在每次加载图像时使用DiskCacheStrategy
枚举来控制缓存:
Glide.with(c)
.load(images.get(position))
.diskCacheStrategy(DiskCacheStrategy.SOURCE) # Will cache the source downloaded image before any transformations are applied
.placeholder(R.mipmap.ic_launcher)
.into(holder.img);
如果您仍想出于其他原因保存文件,请使用SimpleTarget而不是直接加载到ImageView中,如下所示:
Glide.with(c)
.load(images.get(position))
.diskCacheStrategy(DiskCacheStrategy.SOURCE) # Will cache the source downloaded image before any transformations are applied
.placeholder(R.mipmap.ic_launcher)
.asBitmap()
.into(new SimpleTarget<GlideDrawable>() {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
holder.img.setImageDrawable(new BitmapDrawable(bitmap));
saveImage(bitmap); # This being an encapsulation of the steps outlined earlier
}
});