版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android五种数据传递方法汇总2014-01-24 18:42:13|分类:默认分类|举报|字号订阅Android开发中,在不同模块(如Activity)间经常会有各种各样的数据需要相互传递,我把常用的几种方法都收集到了一起。它们各有利弊,有各自的应用场景。我现在把它们集中到一个例子中展示,在例子中每一个按纽代表了一种实现方法。1. 利用Intent对象携带简单数据利用Intent的Extra部分来存储我们想要传递的数据,可以传送int, long, char等一些基础类型,对复杂的对象就无能为力了。 1.1 设置参数java /传递些简单的参数 Intent intentSimple =
2、 new Intent(); intentSimple.setClass(MainActivity.this,SimpleActivity.class); Bundle bundleSimple = new Bundle(); bundleSimple.putString(usr, xcl); bundleSimple.putString(pwd, zj); intentSimple.putExtras(bundleSimple); startActivity(intentSimple); 1.2 接收参数java this.setTitle(简单的参数传递例子); /接收参数 Bundle
3、bunde = this.getIntent().getExtras(); String eml = bunde.getString(usr); String pwd = bunde.getString(pwd); 2. 利用Intent对象携带如ArrayList之类复杂些的数据这种原理是和上面一种是一样的,只是要注意下。 在传参数前,要用新增加一个List将对象包起来。2.1 设置参数java/传递复杂些的参数 Map map1 = new HashMap(); map1.put(key1, value1); map1.put(key2, value2); ListMap list = n
4、ew ArrayListMap(); list.add(map1); Intent intent = new Intent(); intent.setClass(MainActivity.this,ComplexActivity.class); Bundle bundle = new Bundle(); /须定义一个list用于在budnle中传递需要传递的ArrayList,这个是必须要的 ArrayList bundlelist = new ArrayList(); bundlelist.add(list); bundle.putParcelableArrayList(list,bundl
5、elist); intent.putExtras(bundle); startActivity(intent); 2.1 接收参数java this.setTitle(复杂参数传递例子); /接收参数 Bundle bundle = getIntent().getExtras(); ArrayList list = bundle.getParcelableArrayList(list); /从List中将参数转回 ListMap ListMap lists= (ListMap)list.get(0); String sResult = ; for (Map m : lists) for (St
6、ring k : m.keySet() sResult += rn+k + : + m.get(k); 3. 通过实现Serializable接口3.1 设置参数利用Java语言本身的特性,通过将数据序列化后,再将其传递出去。java/通过Serializable接口传参数的例子 HashMap map2 = new HashMap(); map2.put(key1, value1); map2.put(key2, value2); Bundle bundleSerializable = new Bundle(); bundleSerializable.putSerializable(seri
7、alizable, map2); Intent intentSerializable = new Intent(); intentSerializable.putExtras(bundleSerializable); intentSerializable.setClass(MainActivity.this, SerializableActivity.class); startActivity(intentSerializable); 3.2 接收参数java this.setTitle(Serializable例子); /接收参数 Bundle bundle = this.getIntent
8、().getExtras(); /如果传 LinkedHashMap,则bundle.getSerializable转换时会报ClassCastException,不知道什么原因 /传HashMap倒没有问题。 HashMap map = (HashMap)bundle.getSerializable(serializable); String sResult = map.size() =+map.size(); Iterator iter = map.entrySet().iterator(); while(iter.hasNext() Map.Entry entry = (Map.Entr
9、y)iter.next(); Object key = entry.getKey(); Object value = entry.getValue(); sResult +=rn key- +(String)key; sResult +=rn value- +(String)value; 4. 通过实现Parcelable接口这个是通过实现Parcelable接口,把要传的数据打包在里面,然后在接收端自己分解出来。这个是Android独有的,在其本身的源码中也用得很多,效率要比Serializable相对要好。4.1 首先要定义一个类,用于 实现Parcelable接口因为其本质也是序列化数据
10、,所以这里要注意定义顺序要与解析顺序要一致噢。javapublic class XclParcelable implements Parcelable /定义要被传输的数据 public int mInt; public String mStr; public HashMap mMap = new HashMap(); /Describe the kinds of special objects contained in this Parcelables marshalled representation. public int describeContents() return 0; /Fl
11、atten this object in to a Parcel. public void writeToParcel(Parcel out, int flags) /等于将数据映射到Parcel中去 out.writeInt(mInt); out.writeString(mStr); out.writeMap(mMap); /Interface that must be implemented and provided as a public CREATOR field /that generates instances of your Parcelable class from a Par
12、cel. public static final Parcelable.Creator CREATOR = new Parcelable.Creator() public XclParcelable createFromParcel(Parcel in) return new XclParcelable(in); public XclParcelable newArray(int size) return new XclParcelablesize; ; private XclParcelable(Parcel in) /将映射在Parcel对象中的数据还原回来 /警告,这里顺序一定要和wri
13、teToParcel中定义的顺序一致才行! mInt = in.readInt(); mStr = in.readString(); mMap = in.readHashMap(HashMap.class.getClassLoader(); public XclParcelable() / TODO Auto-generated constructor stub 4.2 设置参数java/通过实现Parcelable接口传参的例子 Intent intentParcelable = new Intent(); XclParcelable xp = new XclParcelable(); xp
14、.mInt = 1; xp.mStr = 字符串; xp.mMap = new HashMap(); xp.mMap.put(key, value); intentParcelable.putExtra(Parcelable, xp); intentParcelable.setClass(MainActivity.this, ParcelableActivity.class); startActivity(intentParcelable); 4.3 接收参数java this.setTitle(Parcelable例子); /接收参数 Intent i = getIntent(); XclP
15、arcelable xp = i.getParcelableExtra(Parcelable); TextView tv = (TextView)findViewById(R.id.tv); tv.setText( mInt =+xp.mInt +rn mStr+xp.mStr +rn size()=+xp.mMap.size(); 5. 通过单例模式实现参数传递 单例模式的特点就是可以保证系统中一个类有且只有一个实例。这样很容易就能实现,在A中设置参数,在B中直接访问了。这是几种方法中效率最高的。5.1 定义一个单实例的类java/单例模式 public class XclSingleton
16、 /单例模式实例 private static XclSingleton instance = null; /synchronized 用于线程安全,防止多线程同时创建实例 public synchronized static XclSingleton getInstance() if(instance = null) instance = new XclSingleton(); return instance; final HashMap mMap; public XclSingleton() mMap = new HashMap(); public void put(String key,
17、Object value) mMap.put(key,value); public Object get(String key) return mMap.get(key); 5.2 设置参数java/通过单例模式传参数的例子 XclSingleton.getInstance().put(key1, value1); XclSingleton.getInstance().put(key2, value2); Intent intentSingleton = new Intent(); intentSingleton.setClass(MainActivity.this, SingletonActivity.class); startActivity(intentSingleton); 5.3 接收参数java this.setTitle(单例模式例子); /接收参数 HashMap map = XclSingleton.getInstance().mMap; String sR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云计算导论 课件 第一章 云计算概述
- 2024年人教版七年级英语下册第八单元课堂练习题及答案 第2课时 Section A(2a-2d)
- 高考物理大一轮复习 课后限时集训11 抛体运动-人教版高三全册物理试题
- 高考生物一轮复习 第一编 考点通关 单元测试(六)变异与进化(含解析)-人教版高三全册生物试题
- 关于提高小学数学课堂教学效率的策略的问卷调查
- 护理相关规章制度
- 2024届河北省部分学校高三下学期大数据应用调研联合测评(六)政治答案
- 电大信息化建设经验介绍
- 高精度GNSS测量型天线校准规范
- 第5-6单元(月考)-2024年一年级数学下册阶段质量检测(北师大版)含答案
- 全新人教精通版六年级英语下册教案(全册 )
- 自考《学前教育研究方法》全套课件(完整版)
- (高清版)民用建筑修缮工程施工标准JGJ_T 112-2019
- 后张法预应力空心板梁施工方案
- 冀教版五年级下学期数学计算题全能专项练习
- 水文地质学基础5定律
- 《房屋面积测算技术规程》DGJ32TJ131-2022
- 课程设计---铁路货场平面设计
- 广州移动集家客光缆交接箱建设规范
- 簪花仕女图 说课 01
- 人教版三年级语文下册周周练
评论
0/150
提交评论