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]
1 ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
这里须要注意的是,在android版本号11之前,利用剪切板传递数据是使用setText和getText方法。但在版本号11以后。这两个getText和set方法就被丢弃了。转而取代的是须要用到ClipData对象来传递数据。
相比于getText和setText方法,利用ClipData对象来传递数据。更符合面向对象的编程思维,且所能传递数据的类型也很多其它。关于ClipData对象的说明,请參阅。
这里介绍的是利用ClipData传递字符串
1.将值写入剪切板
[java]
2 ClipData cd = ClipData.newPlainText("label", baseToString);
3 clipboardManager.setPrimaryClip(cd);
2.读取剪切板的值
[java]
4 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]
10 Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB
如须要利用自己定义对象来传值。则在利用剪切板时。须对对象进行转换。
这里我们须要用到base64这个工具类。关于此类的使用方法。请參阅。
1.读取自己定义对象,并将其转换为字符串,写入剪切板
[java]
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]
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实现数据共享。
意图能够传递基本数据,能够通过对象。
当传递对象,在定义所述第一序列的时间的对象的类!
版权声明:本文博客原创文章。博客,未经同意,不得转载。