Android之本地数据存储(一):SharedPreferences
所有的应用程序都必然涉及数据的输入与输出。在Android系统中,主要有五种数据存储模式:
- 1 . Sharedferences:Sharedferences是一种轻型的数据存储方式,本质上是基于XML文件存储key-value键值对数据。通常用来存储一些简单的配置信息;
- 2 . File:使用文件进行数据存储;
- 3 . SQLite:SQLite是一个轻量级的数据库,存储结构化的数据,支持基本SQL语法,是常被采用的一种数据存储方式。Android为SQLite提供了一个名为SQLiteDatabase的类,封装了一些CRUD操作的API;
- 4 . ContentProvider:ContentProvider为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据;
- 5 . Network:使用基于网络的服务获取数据。
其中,前四种为本地数据持久化的存储方式。
- 当应用程序只有少量数据需要保存,而且这些数据的格式很简单,譬如都是String、Int、Long、Float和Boolean等简单数据类型时,可以使用SharedPreferences来保存,常用于保存应用程序的各种配置信息(是否使用振动效果、字体大小等);
- 当应用程序只有少量数据需要保存,而且这些数据的格式比较复杂,可以使用普通文件保存;
- 当应用程序有大量数据需要存储和访问,就可以使用SQLite数据库来保存。SQLite是一个真正轻量级的数据库,它没有后台进程,整个数据库就对应于一个文件;
- 当应用程序需要引用其他应用程序如多媒体播放、通讯录等的数据时,可以使用ContentProvider来调用数据接口;
- 当应用程序需要的数据需要跨设备和持久保存,就不能保存在本地,而应该采用网络服务器存储数据。
本文主要讲解SharedPreferences的使用与应用。
一. SharedPreferences的重要方法
1 . 读取SharedPreferences数据的方法
方法 | 描述 |
---|---|
boolean contains (String key) | 判断SharedPreferences是否包含特定key的数据。 |
abstract Map<String, ?> getAll()
|
获取SharedPreferences数据中全部的键值对数据集合。 |
abstract Xxx getXxx(String key, Xxx defaultValue) | 获取SharedPreferences数据里指定key对应的value。如果key不存在,则返回defaultValue。其中,Xxx可以是boolean、int、float、long、String。 |
abstract Set<String> getStringSet(String key, Set<String> defValues)
|
获取SharedPreferences数据中指定key对应的Set<String> 值。
|
2. 向SharedPreferences写入数据的方法
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过通过SharedPreferences的内部接口SharedPreferences.Editor实现的。SharedPreferences调用edit()方法即可获取它对应的Editor对象。其中Editor对象向SharedPreferences写入数据的方法如下:
方法 | 描述 |
---|---|
abstract SharedPreferences.Editor putXxx(String key, Xxx value) |
向Editor对象存入指定key对应的value数据。其中,Xxx可以是boolean、int、float、long、String。 |
abstract SharedPreferences.Editor clear() |
清空Editor对象中的数据。 |
abstract SharedPreferences.Editor remove(String key) |
删除Editor对象中指定的key对应的数据。 |
abstract SharedPreferences.Editor putStringSet(String key, Set <String> values)
|
向Editor对象存入指定key对应的Set<String> 值。
|
abstract boolean commit() | 当Editor对象编辑完成后,调用该方法提交修改。 |
abstract void apply() | 提交Editor对象的修改。 |
二. 向SharedPreferences中存储数据
SharedPreferences本身是一个接口,不能直接创建SharedPreferences实例,可以通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例。其中,该方法中的mode参数可取的值有:
- Context.MODE_PRIVATE:指定SharedPreferences数据只能被本应用程序读、写;
- Context.MODE_WORLD_READABLE:指定SharedPreferences可被其他应用程序读,但不能写;
- Context.MODE_WORLD_WRITABLE:指定SharedPreferences数据可被其他应用程序读、写。
实现SharedPreferences存储的步骤如下:
- 1 . 创建SharedPreferences对象;
- 2 . 创建SharedPreferences.Editor对象,用于存储数据修改;
- 3 . 通过Editor对象的putXxx()方法,存储key-value对数据信息;
- 4 . 通过Editor对象的commit()方法提交对SharedPreferences的修改。
实例如下:
/*
* 创建SharedPreferences实例
* 其中"myPref"指SharedPreferences数据的XML文件名
* 指定该SharedPreferences数据只能被本应用程序读写
*/
SharedPreferences pref = getSharedPreferences("myPref", MODE_PRIVATE);
// 创建SharedPreferences.Editor对象,用于存储数据修改
SharedPreferences.Editor editor = pref.edit();
// 存储数据信息
editor.putString("name", "zhangsan");
editor.putInt("age", 22);
editor.putLong("time", System.currentTimeMillis());
editor.putBoolean("default", true);
// 提交数据修改
editor.commit();
这样就完成了SharedPreferences的数据写入了。
在Android Studio的DDMS中可以查看"myPref"XML文件信息。myPref.xml所在的文件目录为 "/data/data/<包名>
/shared_prefs/myPref.xml" 。DDMS的打开步骤如下:
"Tools"菜单 ->"Android"菜单 -> "Android Device Monitor"菜单,即可打开DDMS。
在DDMS中查看Android虚拟机下对应的"/data/data/<包名>
/shared_prefs/myPref.xml",并导出myPref.xml至本地电脑中查看,可看到myPref.xml文件内容如下:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<long name="time" value="1449202458471" />
<boolean name="default" value="true" />
<int name="age" value="22" />
<string name="name">zhangsan</string>
</map>
三. 读取本应用程序的SharedPreferences
所有创建的SharedPreferences数据都可以被本应用访问并进行读写操作。
实现SharedPreferences读取的步骤如下:
- 1 . 获取SharedPreferences对象;
- 2 . 获取SharedPreferences中的数据。
// 1. 获取SharedPreferences对象
SharedPreferences pref = getSharedPreferences("myPref", MODE_PRIVATE);
// 2. 取出数据
String name = pref.getString("name", "defaultName");
Int age = pref.getInt("age", 0);
Long time = pref.getLong("time", 0);
Boolean default = pref.getBoolean("default", true);
四. 读写其他应用程序的SharedPreferences数据
要读写其他应用程序的SharedPreferences,前提是该应用程序的SharedPreferences需要指定相应权限,如Context.MODE_WORLD_READABLE(可读,不可写)、Context.MODE_WORLD_WRITABLE(可读写)。
假设要读取的应用程序的的SharedPreferences数据具有Context.MODE_WORLD_WRITABLE权限。为了读取该应用程序的的SharedPreferences,步骤如下:
第一步:创建其他应用程序对应的Context
创建其他应用程序对应的Context的方法如下:
createPackageContext(String packageName, int flags)
其中packageName为该应用程序的包名。flag表示该应用程序的安全限制标记。flag的取值如下:
- CONTEXT_INCLUDE_CODE:可以执行程序包里的代码;
- CONTEXT_IGNORE_SECURITY:忽略安全警告;
- CONTEXT_RESTRICTED:严格模式,可能导致一些特殊特性不可用;
示例:
otherAppContext = createPackageContext("cn.edu.sysu.ce.hope", Context.CONTEXT_IGNORE_SECURITY);
第2步:调用其它应用程序的Context的SharedPreferences对象
// 获取SharedPreferences对象
SharedPreferences pref = otherAppContext.getSharedPreferences("myPref", MODE_PRIVATE);
第3步:向SharedPreferences对象中读写数据
1 . 读取数据:
String name = pref.getString("name", "defaultName");
Int age = pref.getInt("age", 0);
Long time = pref.getLong("time", 0);
Boolean default = pref.getBoolean("default", true);
2 . 写入数据:
// 获取SharedPreferences.Editor对象,用于存储数据修改
SharedPreferences.Editor editor = pref.edit();
// 修改数据信息
editor.putString("name", "lisi");
editor.putBoolean("isMale", true);
// 提交数据修改
editor.commit();
因为SharedPreferences的数据存储格式就是一个XML文件,所以我们完全可以通过使用I/O流的方式读取该XML文件,再通过XML解析来获取数据。但是显然,这种方式是很繁琐,而是用SharedPreferences读写数据则简单很多。
转载于:https://www.cnblogs.com/youseiraws/p/7059086.html
Android之本地数据存储(一):SharedPreferences相关推荐
- android 储存方案,Android本地数据存储方案(一)
Android系列的博客主要是记录和总结自己在平时学习之中遇到的问题,方便日后用到时查看,同时也希望对读者有所帮助.不足之处,欢迎指正~ 在说到Android数据存储之前,先提一下数据持久化,所谓数据 ...
- Android本地数据存储: Reservoir
一:前言 今天做项目,准备使用本地存储,把一些数据存在本地磁盘上,比如用户名.密码这样的.其实大家都知道,这种情况最常用的就是SharedPreferences了,我也不例外,脑子里第一个想到的就是用 ...
- 深入剖析Android中最简单的数据存储方式:SharedPreferences
目录 一. 使用SharedPreferences存储数据 二. 数据的存储位置和格式 三.存储数据的获取 四. 存取复杂类型的数据 五. 设置数据文件的访问权限 Hello,你好呀,我是灰小猿,一个 ...
- [免费专栏] Android安全之数据存储与数据安全「详解」
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...
- 基于AndroidStudio的数据存储(SharedPreferences存储)的简单应用
基于AndroidStudio的数据存储(SharedPreferences存储)的简单应用 前言 一.登录界面设计 二.MainActivity_10_5 中 前言 在手机的登录界面输入用户名和密码 ...
- Android入门(九)文件存储与SharedPreferences存储
原文链接:http://www.orlion.ga/578/ Android系统中主要提供了三种方式用于简单地实现数据持久化功能,即文件存储.SharedPreference存储以及数据库存储.当然, ...
- Android基础_数据存储
2019独角兽企业重金招聘Python工程师标准>>> Android基础_数据存储 Android数据存储的几种形式 继承SQLiteOpenHelper public class ...
- Android Learning:数据存储方案归纳与总结
前言 最近在学习<第一行android代码>和<疯狂android讲义>,我的感触是Android应用的本质其实就是数据的处理,包括数据的接收,存储,处理以及显示,我想针对这几 ...
- Android中的数据存储
Android中的数据存储 1.SharedPreference存储(共享参数) 1.1.使用SharedPreferences存储和读取数据的步骤 存储数据 保存数据一般分为四个步骤: 使用Acti ...
最新文章
- 这位创造GitHub冠军项目的“老男人”,堪称10倍程序员本尊
- PFLD:简单、快速、超高精度人脸特征点检测算法
- 第1关:利用栈实现整数的十进制转八进制
- 修改数据无法提交_学习篇管家婆物联通功能讲解--|修改客户
- 一篇网站架构的文章:一步步构建大型网站架构
- 中间件业务在网易轻舟容器平台的性能调优实践
- coroutine php_PHP 协程实现
- 转载给ffmpeg入门级:我的第一个调用FFmpeg库的程序出炉
- Spring入门看这一篇就够了
- 18.Argument replacement
- js中this理解。
- asp.net 按钮点击调用FileUpload
- Echarts实现数据可视化大屏
- 计算机组成原理第一章作业,计算机组成原理第一章习题答案(作业).doc
- VIP网易邮箱,163VIP邮箱,新浪vip等邮箱的对比分析
- 自制html5拖拽功能实现的拼图游戏
- 一个统计Word文档中行数的VBA例程
- Tiny6410之重定位代码到SRAM+4096
- facetime 来电提醒_从命令行打开FaceTime调用
- SSL证书申购指南教程
热门文章
- python多行注释以什么开头和结尾_Python 中多行注释可以 # 开头,而单行注释则以 ''' 开头和结尾。...
- React-Native 使用真机和指定模拟器调试
- iOS架构-自动打包并上传到App Store(python)(21)
- (0007) iOS 开发之Xcode8上传AppStore遇到的TencentOpenApi_IOS_Bundle.bundle
- (0004) iOS 开发之CocoaPods 升级过程
- ZBrush关于遮罩的一些操作
- css实现横向进度条和竖向进度条
- 【Python】Python学习----第一模块笔记
- Nginx 独立图片服务器的搭建
- 11gR2游标共享新特性带来的一些问题以及_cursor_features_enabled、_cursor_obsolete_threshold和106001 event...