標籤:
原文:http://blog.csdn.net/xueerfei008/article/details/23046341
做項目的時候需要用到在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");
Android基礎 -- Activity之間傳遞資料(bitmap和map對象)