一:使用静态变量传递数据

(1)静态变量传递数据,在目标Activity中声明静态变量,然后使用setText()方法将静态变量的值导出即可;

(2)静态变量传递数据,在主Activity中对目标Activity的静态变量进行赋值,然后通过Intent的startActivity()方法传递给目标Activity。

代码如下:

二:使用剪切板传递数据
主要步骤:
(1)在主Activity中使用ClipBoardManager类定义对象clipboardManager,调用Android的剪切板服务(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
(2)主Activity中使用ClipData.newPlainText()方法创建对象clipData用于存数据,然后调用clipboardManager对象的setPrimaryClip()方法将数据剪切到剪切板;
(3)目标Activity中获取ClipBoardManager类定义的对象clipboardManager,调用对象的getPrimaryClip()方法获取ClipData类的对象,然后使用getItemAt()方法获取剪切板数据;
(4)主Activity中通过Intent的startActivity()方法传递给目标Activity,目标Activity中通过TextView的setText()方法显示数据。
主要代码:


注意:
(1)使用ClipBoardManager对象操作剪切板,但是未提供public的构造函数(单例模式),需要使用(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);获取该对象
(2)在Android-11(Android 3.0)版本之前,利用剪切板传递数据使用setText()和getText()方法,但是在此版本之后,这两个方法就被弃用,转而使用传递ClipData对象来代替。相对于getText和setText而言,利用ClipData对象来传递数据,更符合面向对象的思想,而且所能传递的数据类型也多样化了。关于ClipData对象的说明,请参阅ClipData对象说明。 
(3):在实际编程中,如真需要利用剪切板来传值,需要在调用服务之前来判断android系统的版本。
          if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB)....
(4):如需要利用自定义对象来传值。则在利用剪切板时,须对对象进行转换,被传递的对象必须可序列化,序列化通过实现Serializable接口来标记。。这里我们需要用到base64这个工具类。关于此类的用法,请参阅Base64类


例如:传递复杂数据时,比如说传递一个对象。此时需要先声明一个对象,如下面的代码:

(1)定义一个MyData.java类,并使其实现一个Serializable接口保证其是可序列化的;
>在MyData.java类中定义toString()方法,并添加相应的构造函数;
(2)存入数据:在主Activity中,使用MyData类定义对象,并将对象转化为字符串,此处使用的是Android中提供的 Base64 工具类,这个类主要是用来对对象进行压缩和解码的过程,使用默认方式:Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
(3)取出数据:目标Activity中,通过Base64类对被序列化的数据进行反序列化,将字符串还原为对象Base64.decode(msgString, Base64.DEFAULT),然后进行数据处理。

 主要代码参见:http://www.cnblogs.com/plokmju/p/3140099.html
注意:序列化和反序列化主要用到了IO中一些流的操作。需要注意的是,无论是读取流还是写入流,在使用完之后,都必须关闭  。
总结:使用剪切板传递数据有利有弊,剪切板为Android系统管理的,所以在一个地方存入的数据,在这个Android设备上任何应用都可以访问的到,但是正是因为此设备访问的都是同一个剪切板, 
可能导致当前程序存入的数据在使用前被其他的程序覆盖,从而导致无法正确获得数据。
三:使用全局变量传递数据
eg:app = (App)getApplication();
         app.setName("snowy");
四:使用Intent的putExtra()方法传递数据
代码参见:http://blog.csdn.net/ahuier/article/details/8953017

Android开发—— 传递数据的更多相关文章

  1. 关于Android中传递数据的一些讨论--备用

    在Android中编写过程序的开发人员都知道.在Activity.Service等组件之间传递数据(尤其是复杂类型的数据)很不方便.一般可以使用Intent来传递可序列化或简单类型的数据.看下面的代码 ...

  2. 关于Android中传递数据的一些讨论

    在Android中编写过程序的开发人员都知道.在Activity.Service等组件之间传递数据(尤其是复杂类型的数据)很不方便.一般可以使用Intent来传递可序列化或简单类型的数据.看下面的代码 ...

  3. Android开发-之数据的存储方式一

    在Android中,数据的存储分为两种方式: 1.直接以文件的形式存储在目录中 2.以json格式存储在数据库中 将数据以文件的存储又分为两种方式: 1.生成.txt文件 2.生成xml文件 那么今天 ...

  4. Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用

    前言 啦啦啦各位小伙伴们许久不见了~学期末和过年期间自己忙着做其他事没能及时更新Android开发系列课程的博客,实在是罪过罪过~ 好啦~废话不多说,进入我们今天的主题.今天我们将和大家学习其他的数据 ...

  5. Android之间传递数据包

    在Android中 ,我们知道,两个activity之间通讯要用到Intent类,传递简单数据的方式我们也已经知道了.那么,如何在两个activity之间传递数据包呢,这就要用到我们的Bundle类了 ...

  6. Android Intent传递数据

    刚开始看郭大神的<>,实现以下里面的一些例子.Intent传递数据. 我们利用显示的方式进行Intent的启动. 1.启动intent并输入数据. Intent intent=new In ...

  7. Android Activity传递数据使用getIntent()接收不到,揭秘Intent传递数据与Activity启动模式singleTask的关系。

    activity通过intent传递数据的时候,如果activity未启动,那么在这个刚启动的activity里通过getIntent()会获取到这个intent的数据.. 如果要启动的activit ...

  8. Android Bundle传递数据

    1.传递普通数据 Intent intent=new Intent(MainActivity.this,TwoActivity.class); Bundle bundle=new Bundle(); ...

  9. Android开发_Android数据的四种存储方式

    Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放 ...

随机推荐

  1. mysql 分表的3种方法

    http://blog.51yip.com/mysql/949.html       CSDN - Mysql MERGE分表对大数据量的处理     实战经验: 要分表的表引擎必须是myisam类型 ...

  2. Django-models-m2m

    在Django的orm中,如果有多对多的字段,那么他的第三张表时自己生成的,参考官方文档发现第三张表可以自己写↓: 而且第三张表好像是可以自定制的 from django.db import mode ...

  3. 转载---- 使用opencv源码自己编制android so库的过程

    http://blog.csdn.net/lantishua/article/details/21182965 工作需要,在Android上使用OpenCV.opencv当前的版本(2.4.8)已经有 ...

  4. 通过Pojo对象 field 属性加注解实现格式校验,极大的降低代码量

    近期做一个接口.接受外系统的报文,通过XStream转换成java对象以后.须要对当中的字段做格式校验. 要求例如以下: 传统的方式是硬编码校验.可是对于field非常多的情况.代码量暴增.easy出 ...

  5. jackrabbit官方英文文档加补充(转载)

    关于Jackrabbit To get started with Jackrabbit you should first become familiar with the JCR API. Downl ...

  6. poj 1163 The Triangle &amp;poj 3176 Cow Bowling (dp)

    id=1163">链接:poj 1163 题意:输入一个n层的三角形.第i层有i个数,求从第1层到第n层的全部路线中.权值之和最大的路线. 规定:第i层的某个数仅仅能连线走到第i+1层 ...

  7. DotNetBar MessageBoxEx 显示中文 显示office2007风格

    MessageBoxEx显示消息的时候按钮是中文的解决这个问题设置 MessageBoxEx的UseSystemLocalizedString属性为 true. MessageBoxEx.UseSys ...

  8. hdu 1542&&poj 1151 Atlantis[线段树+扫描线求矩形面积的并]

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  9. Find out when memory leaks are a concern and how to prevent them

    Handling memory leaks in Java programs Find out when memory leaks are a concern and how to prevent t ...

  10. iOS中版本号的获取及其意义

    //对应的是发布的版本号,也就是build #define APP_VERSION [[[NSBundle mainBundle] infoDictionary] objectForKey:@&quo ...