Android开发经验之intent传递大数据
来源:互联网 发布:floyd算法的流程图 编辑:程序博客网 时间:2024/05/21 06:53
今天一上午在解决一个问题就是intent传递数据的时候发现闪退的现象,但是没有报错,我想要实现的功能就是把activity1界面的四张图片加一些信息传递到activity2界面中并且显示出来,但是当我传递两张图片的时候可以正常跳转到activity2,但是传递3张图片的时候就出现闪退的现象,所以断定是因为传递的数据比较大的原因。
网上一查还真是,这绝大多数是由于Bitmap过大导致的,因为Intent值适合传递小数据,当传递的数据较大时(官方并没有给出具体的大小限制,江湖有传言是40k,也有人说是1M,可能跟手机也有关系吧),传递就可能失败甚至程序崩溃。那么,为了避免这种情况的发生,我们的做法应该是:
- 如果你对图片大小要求不告,可以先将图片进行压缩,然后在传递,保证图片的大小不高即可
- 如果你不想对图片进行压缩,可以将图片缓存到一个类的静态成员中,然后在下一个Activity中取即可
- 你也可以将图片先保存在本地,然后在下一个Activity中读取文件
我的做法是第一种,因为activity1显示照片的时候有进行过压缩,所以直接获取
FileOutputStream out = null; try { out = new FileOutputStream(new File(Environment .getExternalStorageDirectory(), PHOTO_FILE_NAME)); bitmap.compress(Bitmap.CompressFormat.JPEG, 40, out); } catch (FileNotFoundException e) { e.printStackTrace(); } byte[] byteImage = PicUtils.bitmap2Bytes(bitmap);
PicUtils工具类里面
/** * bitmap转换成byte流 * * @param bm * @return */ public static byte[] bitmap2Bytes(Bitmap bm) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); }
activity1
Intent intent=new Intent(OChangeCardFillInfoActivity.this,OChaneCardFillDetailActivity.class); intent.putExtra("name",shouhuo_name.getText().toString()); intent.putExtra("address",shouhuo_address.getText().toString()); intent.putExtra("tel",shouhuo_phone.getText().toString()); intent.putExtra("submitId", imagIdReturn); intent.putExtra("bitmap1",imagBm1); intent.putExtra("bitmap2",imagBm2); intent.putExtra("bitmap3",imagBm3); intent.putExtra("bitmap4",imagBm4); // intent.putExtra("bitmap4",((BitmapDrawable)oldPhone_iv4.getDrawable()).getBitmap()); startActivity(intent);
activity2
if(getIntent()!=null){ shouhuo_name.setText(getIntent().getStringExtra("name")+""); shouhuo_address.setText(getIntent().getStringExtra("address")+""); shouhuo_phone.setText(getIntent().getStringExtra("tel")+""); submitIdNum=getIntent().getStringExtra("submitId"); byte[]imagBm1=getIntent().getByteArrayExtra("bitmap1"); byte[]imagBm2=getIntent().getByteArrayExtra("bitmap2"); byte[]imagBm3=getIntent().getByteArrayExtra("bitmap3"); byte[]imagBm4=getIntent().getByteArrayExtra("bitmap4"); oldPhone_iv.setImageBitmap(PicUtils.Bytes2Bimap(imagBm1)); oldPhone_iv2.setImageBitmap(PicUtils.Bytes2Bimap(imagBm2)); oldPhone_iv3.setImageBitmap(PicUtils.Bytes2Bimap(imagBm3)); oldPhone_iv4.setImageBitmap(PicUtils.Bytes2Bimap(imagBm4)); }
大功告成,出现问题找到原因之后就很快解决了~
阅读全文
1 0
- Android开发经验之—intent传递大数据
- Android开发经验之intent传递大数据
- Android开发经验之—intent传递大数据
- Android开发经验之intent传递大数据
- Android进阶之intent传递大数据
- Android开发之Intent数据的传递
- Android之Intent传递数据
- Android开发之使用Intent在Activity之间传递数据
- 【Android 开发教程】使用Intent传递数据
- android 使用Intent传递数据之剪切板
- Android之Intent传递数据的方式
- Android 数据传递之Application、Intent、static
- Android之Intent(数据传递)
- Android开发之使用Intent传递对象
- Android - Intent - 传递数据
- Android - Intent - 传递数据
- Android Intent传递数据
- android intent传递数据
- 3.selenium 处理下拉框 元素
- VS2015 附加进程不能调试程序
- YTU.3174: 链表基本操作---指定结点删除
- 新布局ConstrainLayout属性总结
- Oracle重做日志-OMF管理
- Android开发经验之intent传递大数据
- 简单linux命令
- java面试详解-总有你能碰得到的
- dialog弹框总结
- ==和equals的区别
- Linux下配置SSH建立信任
- Kotlin 第十七章: 异常和注解
- 1-相关资源地址收录
- vuejs使用axios异步访问时用get和post的方法