Android基础 -- Activity之间传递数据(bitmap和map对象)
原文:http://blog.csdn.net/xueerfei008/article/details/23046341
做项目的时候需要用到在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);
- }
取出来字节数组之后,用BitmapFactory中的decodeByteArray方法组合成一个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;
- }
- }
这样才能把map对象扔到bundle中去,
取出来的方法是:
- Bundle bundle = getIntent().getExtras();
- SerializableMap serializableMap = (SerializableMap) bundle
- .get("orderinfo");
Android基础 -- Activity之间传递数据(bitmap和map对象)的更多相关文章
- 【Android 复习】 : Activity之间传递数据的几种方式
在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...
- Android 笔记-Fragment 与 Activity之间传递数据
Fragment 与 Activity之间传递数据有两种方法.一种是使用setArgument,一种是使用接口回调.以下先学习第一种方法. (1)使用setArgument方法: 为了便于理解,我在这 ...
- Android中Activity之间的数据传递
在开发中,我们经常涌用到Activity,那么既然用到了Activity,就一定免不了在两个或者多个Activity之间传递数据.这里我们先说一说原理,然后在看看代码和例子. 情况A:我们需要从Act ...
- [Android学习]Activity之间传递对象和对象集合
开发过程中,Activity之间传递数据是必不可少的,android中使用Intent和Bundle作为数据载体,在Activity之间传递,对于基础数据类型,Bundle已经提供相关的put,get ...
- 大叔也说Xamarin~Android篇~Activity之间传递数组
回到目录 我们在开发应用程序时,不可能只使用一个Layout或者一个Activity,比如你个管理系统,要求用户先登陆然后再使用,这时你至少要有两个activity吧,先登陆一个,然后成功后需要跳到别 ...
- Activity之间传递数据的方式及常见问题总结
Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ...
- Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口
package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...
- 28、activity之间传递数据&批量传递数据
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android ...
- 在activity之间传递数据
在activity之间传递数据 一.简介 二.通过intent传递数据 1.在需要传数据的界面调用 intent.putExtra("data1", "我是fry&quo ...
随机推荐
- lminus
lminus是Synopsy自带的tcl list 操作command. 顾名思义,可以将两个list相减,即过滤掉两个list中相同的element,生成一个新的list,其实是用lsearch与l ...
- poj 3057(bfs+二分匹配)
题目链接:http://poj.org/problem?id=3057 题目大概意思是有一块区域组成的房间,房间的边缘有门和墙壁,'X'代表墙壁,'D'代表门,房间内部的' . '代表空区域,每个空区 ...
- js加密(五)产品目录
1. url:http://www.300600900.cn/ 2. target: 3. 简单分析 偶然发现,这个网站的加密,和landChina加密一模一样,js函数的名字都一样...所以,只贴 ...
- ISE-Backup Data Type
Cisco ISE allows you to back up data from the Primary PAN and from the Monitoring node. Back up can ...
- 微信小程序UDP通信,注意点 接收 onMessage 收到的message是ArrayBuffer缓冲,不能直接输出,要另转String处理
1.WXML 页面代码 <!--index.wxml--> <view class="container"> <view class="us ...
- NUMPY的学习之路(2)——索引,合并,分割,赋值
一.索引 1.1numpy数组的转置 A=np.arange(3,15).reshape(3,4) print(A) print(A[2][0]) print(A[2,1]) print(A[2,:] ...
- 【ES6新增语法详述】
目录 1. 变量的定义 let const 2. 模版字符串 3. 数据解构 4. 函数扩展 设置默认值 箭头函数 5. 类的定义 class 6. 对象的单体模式 "@ ES6新增了关于变 ...
- 传奇版本中利用NPC迅速给人物加血脚本制作
在传奇中,快速给玩家回血的脚本被广泛运用,能刺激玩家消费,怎么说呢,玩家跟人PK激情中,特别是群打,快速补血的重要性不说你也懂的. [@main]神医:“最近玛法大陆动荡不平,每天进进出出这里的伤者日 ...
- 压缩和解压工具bandizip
同质化的压缩软件 提及 Windows 平台的压缩软件,大家往往想起老牌的 WinRAR.开源免费的 7-Zip.国产的快压.好压.360 压缩之类,甚至还有时代的眼泪 WinZip.一直以来,压缩软 ...
- TD tree体验
在体验了学长们设计的app后,我颇有感触,我们也可以凭借自己的力量来开发一款软件,虽然它可能并不如市面上相同类型的那么完美,但它对我们的意义却是不一样的. 我是在下午的见面会上看到的这款软件,接待的学 ...