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

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

这里需要注意的是,在android版本11之前,利用剪切板传递数据是使用setText和getText方法,但在版本11以后,这两个getText和set方法就被丢弃了,转而代替的是需要用到ClipData对象来传递数据。相比于getText和setText方法,利用ClipData对象来传递数据,更符合面向对象的编程思维,且所能传递数据的类型也更多。关于ClipData对象的说明,请参阅ClipData对象说明

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

1.将值写入剪切板

[java] view plaincopy

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

3 clipboardManager.setPrimaryClip(cd);

2.读取剪切板的值

[java] view plaincopy

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

5 {

6     ClipData cd = cm.getPrimaryClip();

7     Item item = cd.getItemAt(0);

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

9 }

这样就可以利用剪切板来传递数据了。

这里需要说明的是在实际编程中,如真需要利用剪切板来传值,需要在调用服务之前来判断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实现数据共享。

意图可以传递基本数据,也可以传递对象。传递对象的时候,对象要的类在定义的时候要先序列化!

时间: 2024-10-21 15:09:49

android 数据共享的相关文章

继承Application实现Android数据共享

     Application类 在Android中,启动一个应用,首先会初始化Application,然后再通过它检查AndroidManifest.xml清单文件,选择须要首先启动的Activity. 在Activity中能够使用getApplication()方法获得该Application的实例,使用它就能够获得当前应用的主题.资源文件里的内容等,而且我们能够通过它来加入自己的全局属性,如User.比如开发一个游戏,须要保存分数,那么我们就能够继承Application. 首先,先写个

Android数据共享

在Android应用程序开发的过程中,借助Bundle类对象来传递数据并不是在所有场景下都适用,就那简单的Intent类对象来说,就不能put进Bundle类对象中.当然不能否认,用Intent类对象来开启另一个Activity或者Service,并利用Bundle类对象来携带数据是个不错的形式,而且用途非常广泛,但不是万能的. 关于在程序中共享数据,方法有很多,下面来看看到底有哪些是比较常用,哪些又是比较符合面向对象和高效.安全的. 1.SharedPerferences 首先来看在同一个Mo

继承Application管理生命周期

继承Application实现Android数据共享 http://www.jianshu.com/p/75a5c24174b2 jessyan提出一个思路,用Application + 接口来管理扩展每个activity的生命周期 这个接口有什么用呢? Application 提供有一个 registerActivityLifecycleCallbacks() 的方法,需要传入的参数就是这个 ActivityLifecycleCallbacks 接口,作用和你猜的没错,就是在你调用这个方法传入

Android 学习笔记之ContentProvider实现数据共享....

PS:最近听老师说打算让我参与企业的app制作,让我加快学习的进度...好吧,貌似下周还有考试...貌似实验室这个app也要做...暂时不管了...那就只能加快进度了,感觉略微的有点激动和紧张,总算是可以开始对项目进行着手操作了...学的东西还是很少,还要继续努力啊...搞定Android的网络通信后就可以正式的进入项目开发了...不说废话了... 学习内容: 1.使用ContentProvider存储数据 2.操作联系人的ContentProvider... 3.多媒体信息的ContentPr

Android学习笔记十九.使用ContentProvider实现数据共享(一)

一.Android如何实现数据共享?  为了在应用程序之间交换数据,Android提供了ContentProvider,ContentProvider是不同应用程序之间进行数据交换的标准API,当一个应用程序需要把自己的数据暴露给其他程序使用时,该应用程序就可通过提供ContentProvider来实现,其他的应用程序就可以通过ContentResolver来操作ContentProvider暴露的数据.一旦某个应用程序通过ContentProvider暴露了自己的数据操作接口,那么不管该应用程

[Android]Samba服务器在Ubuntu下的配置与Windows系统间的数据共享

安装Samba 安装sambasudo apt-get install samba[编辑]Kubuntu 安装系统设置的共享模块sudo apt-get install kdenetwork-filesharing[编辑]配置 1.windows 访问 ubuntu 第一步创建共享目录: 比如要创建/home/用户名/share首先创建这个文件夹 (这个用户名就是你的用户名,为了方便易懂我才这样写的,到时记得自己改啊) 代码:mkdir /home/用户名/share (新建share文件夹)c

android: 实现跨程序数据共享

简单起见,我们还是在上一章中 DatabaseTest 项目的基础上继续开发,通过内容提供器 来给它加入外部访问接口. 打开 DatabaseTest 项目,首先将 MyDatabaseHelper 中使用 Toast 弹出创建数据库成功的提示去除掉,因为跨程序访问时我们不能直接使用 Toast.然后添加 一个 DatabaseProvider 类,代码如下所示: public class DatabaseProvider extends ContentProvider { public sta

android 通过wifi 热点实现手机摄像头数据共享(转)

原文地址:http://blog.csdn.net/sinat_35845281/article/details/52674946 最近想搞一个新奇的玩意儿~~~ 最近一直在在学习通过两个Android手机通过wifi共享摄像头的数据.弄了好久有了点头目.具体有下面几个步骤: 1.对手机相机的开发,自定义surfaceView来定义自己的相机类.主要是显示手机摄像头的画面. 2.对自定义相机的预览画面的数据的获取.然后对数据进行解析. 3.在两台Android手机通过wifi建立传输数据的连接.

Android中的数据共享-application context

最近在做一个模拟Android京东商城的练手项目,其中一个需求是:当用户登录后,如何让用户的id,name,phone,address等信息实现整个应用的数据共享呢? 在两个activity之间传递数据,自然联想到比较常用方法,即通过intent意图绑定一个bundle对象进行传递.然而在多个松耦合的Activity中如何更好的实现数据的传递呢?在各大IT论坛博客中终于学习到了一种更好的解决办法:Application Context. 1.创建一个android.app.Application