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学习之七——乱码的解决方案
一.乱码的原因 乱码是编码不统一引起的,有下面一些地方需要注意 1. Linux 系统默认支持的语系数据:这与 /etc/sysconfig/i18n 有关:2. 你的终端界面 (bash) 的语系: ...
- iTOP-4412开发板---Linux系统学习下载步骤
本文转自迅为论坛:http://www.topeetboard.com 1.cd /home/topeet/Linux-simple/console 下建立.c文件 2. 编译命令,就在此目录下 # ...
- Sql Practice 2
之前写了一个SP用来向dimention table插入0 -1 dummy row的值,但今天在process adventureworksdw2008示例 数据库的时候报错,查看了一下,是因为自己 ...
- 计算机中的颜色XIV——快速变换颜色的V分量
基本知识回顾: 计算机中的颜色Color,用RGB模式存储(用R.G.B三个分量表示颜色,每个分量的范围是0—255). 而计算机中的颜色除了用RGB模式表示以外,常见的还有HSV模式(或者是HSB. ...
- Java : 使用jar包里的图片作为窗体的ICON
文件结构: 源包- -/code/Jframe1.java -/image/1.png 目标: Jframe1.java 使用"/image/1.png"作为左上角的icon 核心 ...
- MVC+AjaxFileUpload文件上传
来源:微信公众号CodeL 本次给大家分享的是ajaxfileupload文件上传插件,百度一大堆功能超炫的文件上传插件,为什么我们会选择这个插件呢? 原因是在此之前,我们尝试使用过很多基于flash ...
- 【温故而知新-Javascript】为DOM元素设置样式
1. 使用样式表 可以通过document.styleSheets属性访问文档中可用的CSS样式表,它会返回一组对象集合,这些对象代表了与文档管理的各个样式表. 每个样式表 都由一个CSSStyleS ...
- Axure学习笔记1--原型设计概述
Axure原型 1.原型的出现 -软件功能复杂,用户需求多 -挖掘用户的实际需求 -项目组之间降低沟通成本 2.类型: [草图原型]描述产品大概需求,记录瞬间灵感 [低保真原型]展示系统的大致结构和基 ...
- 给定一个整数实现奇偶bit位互换
1.分别取出所有奇数bit位和偶数bit位 0x55555555(对应二进制奇数bit位为1,偶数bit位全为0)&num 0xaaaaaaaa(对应二进制即偶数bit位为1,奇数bit位全为 ...
- java spring 框架学习
1. ibm spring 入门系列 https://www.ibm.com/developerworks/cn/java/wa-spring1/ https://www.ibm.com/develo ...