我想使用Glide将位图保存到文件中,然后使用漂亮的“共享”按钮共享图片。我已经使用了我在文档中找到的一些代码,就像这样:
Glide.with(getApplicationContext())
.load(imageUrl)
.asBitmap()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap b, GlideAnimation<? super Bitmap> glideAnimation) {
File file = getExternalFilesDir(null);
try {
URI uri = new URI(imageUrl);
String path = uri.getPath();
String nameOfFile = file + "/" + path.substring(path.lastIndexOf('/') + 1);
OutputStream os = new FileOutputStream(nameOfFile);
b.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.flush();
os.close();
Intent share = new Intent(Intent.ACTION_SEND);
share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + nameOfFile));
share.setType("image/*");
startActivity(Intent.createChooser(share, getResources().getString(R.string.action_share)));
} catch (IOException | URISyntaxException e) {
e.printStackTrace();
}
}
});
事情是随机的,应用程序崩溃,因为Bitmap b在压缩之前被回收。我怎么能避免这个?还有更好的方法吗?
答案 0 :(得分:0)
我和你有类似的问题。 也许你生成一个位图在其他地方使用相同的imageUrl,然后你手动调用bitmap.recycled()。所以你调用 asBitmap()可能会导致Bitmap循环问题。
你可以用asFile();
替换asBitmap().asFile()
.into(new SimpleTarget<File>()
或者不要调用bitmap.recycled()