Android数据共享

在Android应用程序开发的过程中,借助Bundle类对象来传递数据并不是在所有场景下都适用,就那简单的Intent类对象来说,就不能put进Bundle类对象中。当然不能否认,用Intent类对象来开启另一个Activity或者Service,并利用Bundle类对象来携带数据是个不错的形式,而且用途非常广泛,但不是万能的。

关于在程序中共享数据,方法有很多,下面来看看到底有哪些是比较常用,哪些又是比较符合面向对象和高效、安全的。

  1、SharedPerferences

  首先来看在同一个Moudle中的两个文件(Activity界面)之间进行数据的共享。在分享数据的主类MainActivity的重载方法onCreate()中添加以下代码。

1 SharedPreferences shareData = getSharedPreferences("shared_data",MODE_WORLD_WRITEABLE);
2 SharedPreferences.Editor se = shareData.edit();
3 se.putString("shared_data1", "Hello World");
4 se.commit();
5 Intent intent = new Intent(MainActivity.this,GetData.class);
6 startActivity(intent);

  可以看到,在获取共享对象时指定了此次进行的共享标示("shared_data")与模式(MODE_WORLD_WRITEABLE),这个非常重要,前者作为其他地方构建共享对象的唯一标示,后者作为决定当前共享对象的读写模式。后面的Editor类对象主要完成了向共享对象中加载需要共享的数据,是以Key-Value的形式,这里只载入了一对数据(”shared_data1”-”Hello World”,Value的类型任意)。最后调用commit()方法进行提交后,在另外的Activity中即可进行共享数据的提取了。

  下面给出获取数据类GetData的onCreate()方法中做了哪些事。

1 SharedPreferences shareData = getSharedPreferences("shared_data",MODE_WORLD_READABLE);
2 getData = (TextView)findViewById(R.id.get_data);
3 getData.setText("shared_data1 = +shareData.getString("shared_data1", "default"));

  很简单,利用共享对象直接调用getString()方法就可以通过Key来获取Value。

  但是问题来了,SharedPreferences.Editor类对象在加载数据时和Bundle类似,也是通过putType(Key, TypeValue )的形式,如果Type为Intent还是无能为力。

  2、Bundle

  Bundle类是结合Intent类一起使用的,下面给出简单的例子。启动另一个Avtivity时设置Bundle类对象。

1 Bundle bundle = new Bundle();
2 bundle.putString("Key", “Value”);
3 Intent intent = new Intent(MainActivity.this, OtherActivity.class);
4 intent.putExtras(bundle);
5 startActivity(intent);

在OtherActivity类中获取数据:

1 Bundle bundle = this.getIntent().getExtras();
2 String value = bundle.getString("Key");

  3、封装

  将共享数据的声明完全和使用文件分开,将耦合度降到最低,方法是将需要共享的数据全部声明在专门的一个类中。本来打算给出全部数据变量声明为静态变量的类中,考虑到和接下来将要给出的形式类似,而且从专业和安全性的角度不如后者,所以略过了。继承Application类来声明共享数据,并提供设置和提取数据的接口。

1 public class ShareData extends Application {
2     private int shareData1;
3     public int getData1() {
4         return shareData1;
5     }
6     public void setData1 (int shareData1) {
7         this. shareData1 = shareData1;
8     }
9 } 

如果有多个数据,那么相应的设置和提取方法也要实现多个,有兴趣的小伙伴可以采用泛型的复用写出更加简洁的代码。注意,类SharedData中的方法(目标是数据)在整个工程的类中都是可以访问的,方法如下。

1 int shareData1 = ((ShareData)getApplicationContext()).getData1();

那么重点来了,如果在类中声明一个Intent类的对象,很幸运的是用法和int型相同,那么就解决了其在不同文件之间的共享问题。之所以总是以Intent类对象来说事,是因为在某些情况下确实需要用到这个方法。如在继承Service类的子类中是不能直接利用startActivityForResult()方法的,自然就不会有重载onActivityResult()方法的机会,但是又要在该子类中利用onActivityResult()方法返回的Intent类对象。现在好了,可以将需要打开的Activity放在可以重载onActivityResult()方法的类(比如主类)中去实现,同时将返回的Intent对象赋给ShareData类中Intent类对象,然后,就OK了。

时间: 2024-09-30 06:36:58

Android数据共享的相关文章

继承Application实现Android数据共享

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

android 数据共享

android应用各个组件数据共享最基本的有3种方式: 第一,利用Application的子类来实现数据共享. 如下例子所示: /** * @author YangQuanqing 功能:实现数据共享 */ public class DataApplication extends Application { // private static FFtThread fftThread = null;// 傅立叶变换线程对象申明 private static ImageNum tempResult

继承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