Android基础 -- Activity之间传递数据(bitmap和map对象)
来源:互联网 发布:网格最短路径算法 编辑:程序博客网 时间:2024/06/04 18:34
Android基础 -- Activity之间传递数据(bitmap和map对象)
做项目的时候需要用到在2个activity之间传递一些数据,之前做的都是些字符串之类的东东,结果这次卡了好久,折腾了一个下午。
第一个:传递bitmap
这个问题非常奇葩(可能我android水平还不够),居然不会报错,我是直接用bundle或Intent的extral域直接存放bitmap,结果运行时各种宕机,各种界面乱窜(我非常的纳闷)。。。搜索之后看大家都说不能直接传递大于40k的图片,然后在德问论坛上找到了解法。就是把bitmap存储为byte数组,然后再通过Intent传递。
的
代码如下所示:
- Bitmap bmp=((BitmapDrawable)order_con_pic.getDrawable()).getBitmap();
- Intent intent=new Intent(OrderConfirm.this,ShowWebImageActivity.class);
- ByteArrayOutputStream baos=new ByteArrayOutputStream();
- bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
- byte [] bitmapByte =baos.toByteArray();
- intent.putExtra("bitmap", bitmapByte);
- startActivity(intent);
其中 第一行代码就是如何从一个imageview中获得其图片,这个问题也倒腾了下,貌似用setDrawingCacheEnabled也行,因为开始用的这个方法,但是直接在activity之间传递bitmap,所以导致运行时错误,后来改正之后没有再尝试。
先new一个ByteArrayOutputStream流,然后使用Bitmap中的compress方法,把数据压缩到一个byte中,传输就可以了。
在另一个activity中取出来的方法是:
- imageView = (ZoomableImageView) findViewById(R.id.show_webimage_imageview);
- Intent intent=getIntent();
- if(intent !=null)
- {
- byte [] bis=intent.getByteArrayExtra("bitmap");
- Bitmap bitmap=BitmapFactory.decodeByteArray(bis, 0, bis.length);
- imageView.setImageBitmap(bitmap);
- }
再加上一个存储的代码:
- public void saveMyBitmap(String bitName,Bitmap mBitmap) throws IOException {
- File f = new File("/sdcard/Note/" + bitName);
- if(!f.exists())
- f.mkdirs();//如果没有这个文件夹的话,会报file not found错误
- f=new File("/sdcard/Note/"+bitName+".png");
- f.createNewFile();
- try {
- FileOutputStream out = new FileOutputStream(f);
- mBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
- out.flush();
- out.close();
- } catch (FileNotFoundException e) {
- Log.i(TAG,e.toString());
- }
- }
2.传递map对象:
封装到bundle中:
- Map<String,Object> data=orderlist.get(arg2-1);
- SerializableMap tmpmap=new SerializableMap();
- tmpmap.setMap(data);
- bundle.putSerializable("orderinfo", tmpmap);
- intent.putExtras(bundle);
这个SeralizableMap是自己封装的一个实现了Serializable接口的类:
- public class SerializableMap implements Serializable {
- private Map<String,Object> map;
- public Map<String,Object> getMap()
- {
- return map;
- }
- public void setMap(Map<String,Object> map)
- {
- this.map=map;
- }
- }
取出来的方法是:
- Bundle bundle = getIntent().getExtras();
- SerializableMap serializableMap = (SerializableMap) bundle
- .get("orderinfo");
0 0
- byte数组和流 Seralizable:Android基础 -- Activity之间传递数据(bitmap和map对象)
- Android基础 -- Activity之间传递数据(bitmap和map对象)
- Android基础 -- Activity之间传递数据(bitmap和map对象)
- Android基础 -- Activity之间传递数据(bitmap和map对象)
- Android基础 -- Activity之间传递数据(bitmap和map对象)
- Android之 Activity之间传递数据(bitmap和map对象)
- android Activity之间数据传递 Bitmap
- activity和activity之间传递数据(字符串、集合、对象)
- android activity之间传递bitmap
- Android上在两个Activity之间传递Bitmap对象
- Android上在两个Activity之间传递Bitmap对象
- android开发:activity之间如何传递bitmap数据
- Android Activity之间直接传递对象数据(Serializable)
- Activity之间传递数据之Bitmap
- android activity之间传递对象(Serializable 和 Parcelable)
- android activity之间传递对象(Serializable 和 Parcelable)
- android activity之间传递对象(Serializable 和 Parcelable)
- android activity之间传递对象(Serializable 和 Parcelable)
- SAP ABAP编程 MOVE-CORRESPONDING将一个结构中的数据赋予另一个结构中
- UIStoryboard
- 大电容滤低频,小电容滤高频?—滤波电容的选择
- 用分治法求最大最小值
- Understanding Linux CPU Load - when should you be worried
- Android基础 -- Activity之间传递数据(bitmap和map对象)
- Java将科学计数法数据转为字符串
- vs2010 资源在另一个编辑器中打开 怎么回事?
- Android之Activity分析
- Java面试宝典2014版
- the file “XXX” could not be opened because you don't have permission to view it
- 虚拟主机原理
- Java利用jQuery的ajaxFileUpload异步上传文件的几种方式
- 成员以其在类中声明的顺序构造