graceting

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

(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



posted on 2014-11-23 11:59  IT-tingting  阅读(614)  评论(0编辑  收藏  举报