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]viewplaincopy

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

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

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

1.将值写入剪切板

[java]viewplaincopy

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

3clipboardManager.setPrimaryClip(cd);

2.读取剪切板的值

[java]viewplaincopy

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

5{

6ClipDatacd=cm.getPrimaryClip();

7Itemitem=cd.getItemAt(0);

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

9}

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

[java]viewplaincopy

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

如需要利用自定义对象来传值。则在利用剪切板时,须对对象进行转换。这里我们需要用到base64这个工具类。关于此类的用法,请参阅Base64

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

[java]viewplaincopy

11//自定义一个对象

12MyDatamd=newMyData("kimifdw",26);

13//定义字符串

14StringbaseToString="";

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

16ByteArrayOutputStreambyteArrayOutputStream=newByteArrayOutputStream();

17try

18{

19ObjectOutputStreamobjectOutputStream=newObjectOutputStream(byteArrayOutputStream);

20objectOutputStream.writeObject(md);

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

22objectOutputStream.close();

23}

24catch(Exceptione)

25{

26e.printStackTrace();

27}

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

[java]viewplaincopy

28//base64转换成toString

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

30//从流中读取数据

31ByteArrayInputStreambyteArrayInputStream=newByteArrayInputStream(base64ToString);

32try

33{

34ObjectInputStreamobjectInputStream=newObjectInputStream(byteArrayInputStream);

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

36objectInputStream.close();

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

38}

39catch(Exceptione)

40{

41e.printStackTrace();

42}

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


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

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

更多相关文章

  1. android数据库事务操作详解
  2. Android应用程序窗口(Activity,Window,View)原理解析
  3. [Android]Http通信,HttpService服务端通过getEntity获取HttpClien
  4. Android(安卓)Audio 数据流详解
  5. android 蓝牙开发 蓝牙 bluetoothsocket connect 经常出错 解决
  6. Android(安卓)Input流程
  7. unity Android(安卓)csv 数据持久化
  8. [置顶] json数据解析与生成 android
  9. android改变字体的颜色的三种方法

随机推荐

  1. android build error : android the corr
  2. PreferenceActivity里加入普通的View
  3. ToggleButton的使用
  4. [Android] 单独编译生成boot.img时mkboot
  5. android导入工程报错
  6. Android tab 学习
  7. Android——RatingBar(评价条)相关知识总结
  8. sensor
  9. Android选项卡TabHost方式实现
  10. android ActionBar(官方指导)