zoukankan      html  css  js  c++  java
  • android 数据共享

    android数据共享的各种部件中的应用是最重要的3途径:

    第一。使用Application子类来实现数据共享。

    例如,请看下面的例子:

    /**
     * @author YangQuanqing 特征:据共享
     */
    public class DataApplication extends Application {



    // private static FFtThread fftThread = null;// 傅立叶变换线程对象申明
    private static ImageNum tempResult = null;// 傅立叶变换结果实例申明
    private static byte[] rawDataTemp = null;// 录音原始数字信号
    private static ImageNum[] result = null;// 傅立叶变换后的结果保存
    private static int nEndFrame,nStartFrame ;


    public DataApplication() {


    }


    /**
    * @return the nEndFrame
    */
    public static int getnEndFrame() {
    return nEndFrame;
    }


    /**
    * @param nEndFrame the nEndFrame to set
    */
    public static void setnEndFrame(int nEndFrame) {
    DataApplication.nEndFrame = nEndFrame;
    }


    /**
    * @return the nStartFrame
    */
    public static int getnStartFrame() {
    return nStartFrame;
    }


    /**
    * @param nStartFrame the nStartFrame to set
    */
    public static void setnStartFrame(int nStartFrame) {
    DataApplication.nStartFrame = nStartFrame;
    }





    /**
    * 函数名:setRawData 功能:将原始的数字信号用全局变量保存在内存中 參数:rawDataTemp1用于保存的原始数字信号
    */
    public static void setRawData(byte[] rawDataTemp1) {
    rawDataTemp = rawDataTemp1;


    }


    /**
    * 函数名:getRawDataTemp 功能:获得用全局变量保存在内存中的数字信号 返回值:返回原始数字信号
    */
    public static byte[] getRawDataTemp() {
    return rawDataTemp;
    }


    /**
    * 函数名:setFFTRusult 功能:将经过FFT变换后的数字信号用全局变量保存在内存中

    */
    public static void setFFTRusult(ImageNum[] result1) {
    result = result1;
    }


    /**
    * 函数名:getFFTRusult 功能:获得用全局变量保存在内存中的FFT后的结果 返回值:返回FFT后的结果
    */
    public static ImageNum[] getFFTRusult() {
    return result;
    }


    /**
    * 函数名:getFFTRusult 功能:获得用全局变量保存在内存中的FFT后的结果 返回值:返回FFT后的结果
    */
    public static ImageNum getTempResult() {
    return tempResult;
    }


    /**
    * 函数名:setFFTRusult 功能:将经过FFT变换后的数字信号用全局变量保存在内存中

    */
    public static void setTempResult(ImageNum image) {
    DataApplication.tempResult = image;
    }


    }

    须要注意的是该类必须是静态方法。才干实现数据共享。

    第二,利用剪切板实现数据共享

    Android开发中我们常常要遇到的一个问题就是数据在不同的Activity之间的共享。在Android开发中有非常多种方法能够达到这个目地。

    这里介绍一种比較常见、又经常使用的一种方法就是使用剪切板。

    调用服务

    [java] view plaincopy

     

    ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);  

    这里须要注意的是,在android版本号11之前,利用剪切板传递数据是使用setTextgetText方法。但在版本号11以后。这两个getTextset方法就被丢弃了。转而取代的是须要用到ClipData对象来传递数据。

    相比于getTextsetText方法,利用ClipData对象来传递数据。更符合面向对象的编程思维,且所能传递数据的类型也很多其它。关于ClipData对象的说明,请參阅ClipData对象说明

    这里介绍的是利用ClipData传递字符串

    1.将值写入剪切板

    [java] view plaincopy

     

    ClipData cd = ClipData.newPlainText("label", baseToString);  

    clipboardManager.setPrimaryClip(cd);  

    2.读取剪切板的值

    [java] view plaincopy

     

    if(cm.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN))  

    {  

        ClipData cd = cm.getPrimaryClip();  

        Item item = cd.getItemAt(0);  

            txtView.setTextitem.getText().toString());  

    }  

    这样就能够利用剪切板来传递数据了。
    这里须要说明的是在实际编程中。如真须要利用剪切板来传值。须要在调用服务之前来推断android系统的版本号。

    [java] view plaincopy

     

    10 Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB  

    如须要利用自己定义对象来传值。则在利用剪切板时。须对对象进行转换。

    这里我们须要用到base64这个工具类。关于此类的使用方法。请參阅Base64

    1.读取自己定义对象,并将其转换为字符串,写入剪切板

    [java] view plaincopy

     

    11 //自己定义一个对象  

    12 MyData md = new MyData("kimifdw",26);  

    13 //定义字符串  

    14 String baseToString ="";  

    15 //1.将对象转换成字符串  

    16 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();  

    17 try  

    18 {  

    19     ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);  

    20     objectOutputStream.writeObject(md);  

    21     baseToString = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);  

    22     objectOutputStream.close();  

    23 }  

    24 catch(Exception e)  

    25 {  

    26     e.printStackTrace();  

    27 }  

    2.读取剪切板的字符串,并将其转换为对象

    [java] view plaincopy

     

    28 //base64转换成toString  

    29 byte[] base64ToString = Base64.decode(item.getText().toString(), Base64.DEFAULT);  

    30 //从流中读取数据  

    31 ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64ToString);  

    32 try  

    33 {  

    34       ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);  

    35       MyData md = (MyData)objectInputStream.readObject();  

    36      objectInputStream.close();  

    37       txtView.setText(md.toString());  

    38 }  

    39 catch(Exception e)  

    40 {  

    41       e.printStackTrace();  

    42 }  

     这里。主要用到了IO中一些流的操作。须要注意的是。不管是读取流还是写入流。在使用完之后。都必须关闭


    第三。通过意图Intent实现数据共享。

    意图能够传递基本数据,能够通过对象。

    当传递对象,在定义所述第一序列的时间的对象的类!

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    [转载]在sharepoint里增加PDF图标显示收藏主题
    CuratorFramework开源Zookeeper快速开发框架介绍
    Zookeeper和CuratorFramework实践之:分布式消息队列
    Zookeeper和CuratorFramework实践系列之: 配置管理
    JS 文字向上滚动代码
    sql递归查询问题
    双线单IP和双线双IP机房的区别
    js获取标准北京时间
    ftp 21端口被占用解决办法
    "由于没有远程桌面授权服务器可以提供许可证..."不能远程桌面解决方法
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4711820.html
Copyright © 2011-2022 走看看