一开始是想使用Intent传递bitmap到详情页面再设置图片,但报了JavaBinder: !!! FAILED BINDER TRANSACTION !!! ,查了一下发现是
出现这个问题的原因是我在两个Activity之间使用Intent传递过大的Bitmap才出现的,用Intent传bitmap不能大于40KB,否则就会出现这个情况
然后有对应的解决办法,就是把传递的bitmap给压缩了,但我压缩完还是报这个错误QAQ
public static Bitmap compressImage(Bitmap image) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
int options = 100;
while (baos.toByteArray().length / 1024 > 40) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩
baos.reset();//重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
options -= 60;//每次都减少60
}
ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
return bitmap;
}
待解决.
最后使用
已解决,把bitmap转换成字节数组然后再发送,在接收activity中再变成bitmap.
private byte[] Bitmap2Bytes(Bitmap bm){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
Intent intent = getIntent();
if (intent != null){
byte[] b = intent.getByteArrayExtra("byte");
Log.i(TAG, "onCreate: "+b);
bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
Log.i(TAG, "onCreate: "+bitmap);
// if (intent != null){
// bitmap = intent.getParcelableExtra("details");
runOnUiThread(new Runnable() {
@Override
public void run() {
img.setImageBitmap(bitmap);
}
});
// }
}
不用看注释.
新问题出现,只能点击一次,显示一个详情页面,如果返回再点击就会闪退.
2021/5/1. 啊其实是搜索出来需要等一会才能点击跳转到详情页面,如果刚进去就直接点就会闪退.
这个…换了种方法实现详情页,突然反应过来传图片是一个比较憨憨的方法,于是我把src的list设成了全局静态变量,这样就可以通过传递position获得到想要的图片了,但是,点开另一个图片详情页时候,在一个瞬间显示的还是上一个图片,然后立刻刷新,这个我想想…
全使用静态变量来传递了,解决啦.不知道会不会对性能产生影响