您的位置:首页 > 移动开发 > Android开发

Android基础 -- Activity之间传递数据(bitmap和map对象)

2014-09-25 09:41 513 查看
Android基础 -- Activity之间传递数据(bitmap和map对象)

做项目的时候需要用到在2个activity之间传递一些数据,之前做的都是些字符串之类的东东,结果这次卡了好久,折腾了一个下午。

第一个:传递bitmap

这个问题非常奇葩(可能我android水平还不够),居然不会报错,我是直接用bundle或Intent的extral域直接存放bitmap,结果运行时各种宕机,各种界面乱窜(我非常的纳闷)。。。搜索之后看大家都说不能直接传递大于40k的图片,然后在德问论坛上找到了解法。就是把bitmap存储为byte数组,然后再通过Intent传递。



代码如下所示:

[java] view
plaincopy





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中取出来的方法是:

[java] view
plaincopy





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);

}

取出来字节数组之后,用BitmapFactory中的decodeByteArray方法组合成一个bitmap就可以了。

再加上一个存储的代码:

[java] view
plaincopy





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中:

[java] view
plaincopy





Map<String,Object> data=orderlist.get(arg2-1);

SerializableMap tmpmap=new SerializableMap();

tmpmap.setMap(data);

bundle.putSerializable("orderinfo", tmpmap);

intent.putExtras(bundle);

这个SeralizableMap是自己封装的一个实现了Serializable接口的类:

[java] view
plaincopy





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;

}

}

这样才能把map对象扔到bundle中去,

取出来的方法是:

[java] view
plaincopy





Bundle bundle = getIntent().getExtras();

SerializableMap serializableMap = (SerializableMap) bundle

.get("orderinfo");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: