Android数据共享
Android数据共享
在Android应用程序开发的过程中,借助Bundle类对象来传递数据并不是在所有场景下都适用,就那简单的Intent类对象来说,就不能put进Bundle类对象中。当然不能否认,用Intent类对象来开启另一个Activity或者Service,并利用Bundle类对象来携带数据是个不错的形式,而且用途非常广泛,但不是万能的。
关于在程序中共享数据,方法有很多,下面来看看到底有哪些是比较常用,哪些又是比较符合面向对象和高效、安全的。
1、SharedPerferences
首先来看在同一个Moudle中的两个文件(Activity界面)之间进行数据的共享。在分享数据的主类MainActivity的重载方法onCreate()中添加以下代码。
SharedPreferences shareData = getSharedPreferences("shared_data", MODE_WORLD_WRITEABLE);
SharedPreferences.Editor se = shareData.edit();
se.putString("shared_data1", "Hello World");
se.commit();
Intent intent = new Intent(MainActivity.this,GetData.class);
startActivity(intent);
可以看到,在获取共享对象时指定了此次进行的共享标示("shared_data")与模式(MODE_WORLD_WRITEABLE),这个非常重要,前者作为其他地方构建共享对象的唯一标示,后者作为决定当前共享对象的读写模式。后面的Editor类对象主要完成了向共享对象中加载需要共享的数据,是以Key-Value的形式,这里只载入了一对数据(”shared_data1”-”Hello World”,Value的类型任意)。最后调用commit()方法进行提交后,在另外的Activity中即可进行共享数据的提取了。
下面给出获取数据类GetData的onCreate()方法中做了哪些事。
SharedPreferences shareData = getSharedPreferences("shared_data", MODE_WORLD_READABLE);
getData = (TextView)findViewById(R.id.get_data);
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类对象。
Bundle bundle = new Bundle();
bundle.putString("Key", “Value”);
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
intent.putExtras(bundle);
startActivity(intent);
在OtherActivity类中获取数据:
Bundle bundle = this.getIntent().getExtras();
String value = bundle.getString("Key");
3、Application
将共享数据的声明完全和使用文件分开,将耦合度降到最低,方法是将需要共享的数据全部声明在专门的一个类中。本来打算给出全部数据变量声明为静态变量的类中,考虑到和接下来将要给出的形式类似,而且从专业和安全性的角度不如后者,所以略过了。继承Application类来声明共享数据,并提供设置和提取数据的接口。
public class ShareData extends Application {
private int shareData1;
public int getData1() {
return shareData1;
}
public void setData1 (int shareData1) {
this. shareData1 = shareData1;
}
}
如果有多个数据,那么相应的设置和提取方法也要实现多个,有兴趣的小伙伴可以采用泛型的复用写出更加简洁的代码。注意,类SharedData中的方法(目标是数据)在整个工程的类中都是可以访问的,方法如下。
int shareData1 = ((ShareData)getApplicationContext()).getData1();
那么重点来了,如果在类中声明一个Intent类的对象,很幸运的是用法和int型相同,那么就解决了其在不同文件之间的共享问题。之所以总是以Intent类对象来说事,是因为在某些情况下确实需要用到这个方法。如在继承Service类的子类中是不能直接利用startActivityForResult()方法的,自然就不会有重载onActivityResult()方法的机会,但是又要在该子类中利用onActivityResult()方法返回的Intent类对象。现在好了,可以将需要打开的Activity放在可以重载onActivityResult()方法的类(比如主类)中去实现,同时将返回的Intent对象赋给ShareData类中Intent类对象,然后,就OK了。
Android数据共享的更多相关文章
- android 数据共享
android数据共享的各种部件中的应用是最重要的3途径: 第一.使用Application子类来实现数据共享. 例如,请看下面的例子: /** * @author YangQuanqing 特征: ...
- 继承Application实现Android数据共享
Application类 在Android中,启动一个应用,首先会初始化Application,然后再通过它检查AndroidManifest.xml清单文件,选择须要首先启动的Activi ...
- 继承Application管理生命周期
继承Application实现Android数据共享 http://www.jianshu.com/p/75a5c24174b2 jessyan提出一个思路,用Application + 接口来管理扩 ...
- android: 实现跨程序数据共享
简单起见,我们还是在上一章中 DatabaseTest 项目的基础上继续开发,通过内容提供器 来给它加入外部访问接口. 打开 DatabaseTest 项目,首先将 MyDatabaseHelper ...
- Android 学习笔记之ContentProvider实现数据共享....
PS:最近听老师说打算让我参与企业的app制作,让我加快学习的进度...好吧,貌似下周还有考试...貌似实验室这个app也要做...暂时不管了...那就只能加快进度了,感觉略微的有点激动和紧张,总算是 ...
- android 通过wifi 热点实现手机摄像头数据共享(转)
原文地址:http://blog.csdn.net/sinat_35845281/article/details/52674946 最近想搞一个新奇的玩意儿~~~ 最近一直在在学习通过两个Androi ...
- Android ContentProvider数据共享
一.构造一个自己的Provider实现App之间数据共享 1.我们先来了解一下 Uri(统一资源定位符) 定义:每一个Content Provider使用一个公开的URI唯一标示其数据集,Andr ...
- 【转】 Pro Android学习笔记(八四):了解Package(3):包间数据共享
目录(?)[-] 共享User ID的设置 共享资源例子 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowing ...
- android 多应用程序数据共享 ContentProvider和ContentResolver
android 没有一个可以将所有应用程序数据统一放置的地方,即两个应用程序间的数据不能共享.但ContentProvider与ContentResolver可以解决多应用程序数据共享. 我们都知 ...
随机推荐
- 【linux环境下】RabbitMq的安装和监控插件安装
[注意安装过程中,提示某些命令not found,直接yum isntall一下就好了] 以下是我在CentOS release 6.4下亲测成功的. RabbitMq的安装: RabbitMQ是 ...
- 关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造)
关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造) 摘要:在中文搜索中的标点.符号往往也是有语义的,比如我们要搜索“C++”或是“C#”,我们不希望搜索出来的全是“C”吧?那样对程 ...
- 详细的图文教程来实现 eclipse环境下如何配置tomcat,并且把项目部署到Tomcat服务器上
很多初学,尤其自学JavaWeb的朋友首次在eclipse下配置tomcat时,总会有种难下手的感觉,在此,通过图文解说的方法,最直观的向大家演示一遍该配置过程. 第一部分:eclipse环境下如何配 ...
- JavaScript日期组件的实现
旅游频道的开发中需要定义各种日期组件,有的是基本的日期选择, 这个基本日期只包含如下功能 左右翻(月) 点击天回填到输入域 点击“今天”,回填今天的日期到输入域 点击“关闭”,日期控件关闭 有的同时显 ...
- Azure CDN 启用HTTPS
默认情况下,订阅里的CDN不支持HTTPS 需要联系21v,提交工单告知订阅号,由后台为订阅启用CDN的HTTPS功能. 然后就可以在创建CDN时选到HTTPS的选项了.
- dipole antenna simulation by HFSS
工作频点为1GHz,新建工程,添加新设计,编辑添加下面的变量 建立天线模型,即两个金属圆柱.编辑完一个振子后,另一半可以用镜像命令产生参数如下设置 ,材料为PEC 两个圆柱间建立一个矩形片,连接两个圆 ...
- uGUI练习(八) InputField
InputField 文本输入组件,本文练习InputField的属性及事件 一.属性 1.Character Limit 限制字符长度(0表示不限制),比如:设置只能输入3个字符(中文,英文,数字, ...
- mysql乱码的好文
1. http://www.blogjava.net/wldandan/archive/2007/09/04/142669.html 2. http://www.111cn.net/database/ ...
- app:transformClassesWithJarMergingForDebug uplicate entry: android/support/v4/app/BackStackState$1.class
.Execution failed for task ':app:transformClassesWithJarMergingForDebug'.> com.android.build.api. ...
- UIImageJPEGRepresentation和UIImagePNGRepresentation
UIImageJPEGRepresentation方法在耗时上比较少 而UIImagePNGRepresentation耗时操作时间比较长 -(void)imagePickerController:( ...