zoukankan      html  css  js  c++  java
  • Android开发—— 传递数据

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

    (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



  • 相关阅读:
    php字符串处理函数大全 转
    php http Manual
    HTTP协议详解 百度文库
    PHP获取指定日期的上个月的日期 转
    计算指定日期的前N个月日期
    MySQL之count(*)与count(id)效率比较<转>
    生成器
    可迭代对象_迭代器
    变量内容的删除替换和替代
    软件磁盘阵列
  • 原文地址:https://www.cnblogs.com/graceting/p/5034042.html
Copyright © 2011-2022 走看看