原文:http://blog.csdn.net/xueerfei008/article/details/23046341

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

第一个:传递bitmap

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

代码如下所示:

  1. Bitmap bmp=((BitmapDrawable)order_con_pic.getDrawable()).getBitmap();
  2. Intent intent=new Intent(OrderConfirm.this,ShowWebImageActivity.class);
  3. ByteArrayOutputStream baos=new ByteArrayOutputStream();
  4. bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
  5. byte [] bitmapByte =baos.toByteArray();
  6. intent.putExtra("bitmap", bitmapByte);
  7. startActivity(intent);

其中 第一行代码就是如何从一个imageview中获得其图片,这个问题也倒腾了下,貌似用setDrawingCacheEnabled也行,因为开始用的这个方法,但是直接在activity之间传递bitmap,所以导致运行时错误,后来改正之后没有再尝试。

先new一个ByteArrayOutputStream流,然后使用Bitmap中的compress方法,把数据压缩到一个byte中,传输就可以了。

在另一个activity中取出来的方法是:

  1. imageView = (ZoomableImageView) findViewById(R.id.show_webimage_imageview);
  2. Intent intent=getIntent();
  3. if(intent !=null)
  4. {
  5. byte [] bis=intent.getByteArrayExtra("bitmap");
  6. Bitmap bitmap=BitmapFactory.decodeByteArray(bis, 0, bis.length);
  7. imageView.setImageBitmap(bitmap);
  8. }

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

再加上一个存储的代码:

  1. public void saveMyBitmap(String bitName,Bitmap mBitmap) throws IOException {
  2. File f = new File("/sdcard/Note/" + bitName);
  3. if(!f.exists())
  4. f.mkdirs();//如果没有这个文件夹的话,会报file not found错误
  5. f=new File("/sdcard/Note/"+bitName+".png");
  6. f.createNewFile();
  7. try {
  8. FileOutputStream out = new FileOutputStream(f);
  9. mBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
  10. out.flush();
  11. out.close();
  12. } catch (FileNotFoundException e) {
  13. Log.i(TAG,e.toString());
  14. }
  15. }

2.传递map对象:

封装到bundle中:

  1. Map<String,Object> data=orderlist.get(arg2-1);
  2. SerializableMap tmpmap=new SerializableMap();
  3. tmpmap.setMap(data);
  4. bundle.putSerializable("orderinfo", tmpmap);
  5. intent.putExtras(bundle);

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

  1. public class SerializableMap implements Serializable {
  2. private Map<String,Object> map;
  3. public Map<String,Object> getMap()
  4. {
  5. return map;
  6. }
  7. public void setMap(Map<String,Object> map)
  8. {
  9. this.map=map;
  10. }
  11. }

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

取出来的方法是:

    1. Bundle bundle = getIntent().getExtras();
    2. SerializableMap serializableMap = (SerializableMap) bundle
    3. .get("orderinfo");

Android基础 -- Activity之间传递数据(bitmap和map对象)的更多相关文章

  1. 【Android 复习】 : Activity之间传递数据的几种方式

    在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...

  2. Android 笔记-Fragment 与 Activity之间传递数据

    Fragment 与 Activity之间传递数据有两种方法.一种是使用setArgument,一种是使用接口回调.以下先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这 ...

  3. Android中Activity之间的数据传递

    在开发中,我们经常涌用到Activity,那么既然用到了Activity,就一定免不了在两个或者多个Activity之间传递数据.这里我们先说一说原理,然后在看看代码和例子. 情况A:我们需要从Act ...

  4. [Android学习]Activity之间传递对象和对象集合

    开发过程中,Activity之间传递数据是必不可少的,android中使用Intent和Bundle作为数据载体,在Activity之间传递,对于基础数据类型,Bundle已经提供相关的put,get ...

  5. 大叔也说Xamarin~Android篇~Activity之间传递数组

    回到目录 我们在开发应用程序时,不可能只使用一个Layout或者一个Activity,比如你个管理系统,要求用户先登陆然后再使用,这时你至少要有两个activity吧,先登陆一个,然后成功后需要跳到别 ...

  6. Activity之间传递数据的方式及常见问题总结

    Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...

  7. Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口

    package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...

  8. 28、activity之间传递数据&批量传递数据

    import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android ...

  9. 在activity之间传递数据

    在activity之间传递数据 一.简介 二.通过intent传递数据 1.在需要传数据的界面调用 intent.putExtra("data1", "我是fry&quo ...

随机推荐

  1. 【vue】 router.beforeEach

    import store from '@/store' const Vue = require('vue') const Router = require('vue-router') Vue.use( ...

  2. Jarvis OJ - Baby's Crack - Writeup

    Jarvis OJ - Baby's Crack - Writeup M4x原创,欢迎转载,转载请表明出处 这是我第一次用爆破的方法做reverse,值得记录一下 题目: 文件下载 分析: 下载后解压 ...

  3. git merge 将多个commit合并为一条之--squash 选项

    转自: https://blog.csdn.net/themagickeyjianan/article/details/80333645 改进版本:合并多个提交为一条(git merge --squa ...

  4. 了解 go 的 Context

    go 的 Context 一直对 go 的 Context 一知半解,不了解其用途,因此在这里着重了解一下 go 语言的 Context 飞雪无情的一个博文对 go 的 Context 讲的比较易懂一 ...

  5. 7-8 Left-pad

    思路 注意读入和输出格式 如果用fgets读入的话会带上回车,输出的时候一定不要输出了双回车 并且此时的length也会比原始长度多了一,要注意长度比较,这里容易出错 代码 #include < ...

  6. dbGet net trace instant pin

    proc rn { net_name } {puts " "puts "Net name : $net_name : "set name_rule [dbget ...

  7. Linux查看mysql是否启动的命令

    使用命令 # service mysqld status 或者 # service mysql status 来查看mysql 的启动状态. 如果是 mysqld is stopped 那就说明mys ...

  8. 谁说程序员没有时间关心女朋友的,Python 教你如何掌握女神情绪变化

    很多人都是在朋友圈装死,微博上蹦迪.微信朋友圈已经不是一个可以随意发表心情的地方了,微博才是! 所以你不要傻傻盯着女神的朋友圈发呆啦!本文教你如何用 Python 自动通知女神微博情绪变化,从今天开始 ...

  9. 放眼全球,关注游戏质量变化:腾讯WeTest发布《2019中国移动游戏质量白皮书》

    2019是中国游戏市场,尤其是手游市场称得上是跌宕起伏的一年,同时也是各大厂商推陈出新突破过去的一年.面对竞争激烈的市场,手游厂商们不仅着眼于游戏质量的提升,更是将一众优秀的国产游戏带入到了海外市场, ...

  10. pod的状态及操作

    查看pod的标签 [root@master pod]# kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS cv- ...