Logo

android 数据本地存储 安卓本地存储有哪几种

photo

2023年09月19日

所有的应用程序都必然涉及数据的输入与输出。在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读写数据则简单很多。

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它
所有附件
该文章没有附件.
本文为原创文章,请注意保留出处!

热门文章

西游记之大圣归来 《西游记之大圣归来》是根据中国传统神话故事《西游记》进行拓展和演绎的3D动画电影。由横店影视、天空之城、燕城十月与微影时代作为出品方,高路动画、恭梓兄弟、世纪长龙、山东影视、东台龙行盛世、淮安西游产业与永康壹禾作为联合出品方出品,田晓鹏执导,张磊、林子杰、刘九容和童自荣等联袂配音。影片讲述了已于五行山下寂寞沉潜五百年的孙悟空被儿时的唐僧——俗名江流儿的小和尚误打误撞地解除了封印,在相互陪伴的冒险之旅中找回初心,完成自我救赎的故事。 作者:Pastore Antonio
1448 浏览量
ffmpeg+srs 实现直播流 这篇文章是我在做直播流的时候收集的所有素材,没有太多的整理,都放到了脑袋里面了,之后有时间了再整理成...ffmpeg+srs实现直播流 作者:Pastore Antonio
1387 浏览量
常用的Centos操作Shell命令 玩WordPress的时候经常会接触到一些常用的命令,老是忘记……人年纪大了就是不给力啊。浏览量:...常用的Centos操作Shell命令 作者:Pastore Antonio
1387 浏览量
项目十大管理和五大过程 PMBOK五大过程组是什么?PMBOK五大过程组是:启动过程、规划过程、执行过程、监...项目十大管理和五大过程 作者:Pastore Antonio
1363 浏览量
[ Office 365 开发系列 ] 身份认证 前言本文完全原创,转载请说明出处,希望对大家有用。通常我们在开发一个应用时,需要考虑用户身份认证...[Office365开发系列]身份认证 作者:Pastore Antonio
1357 浏览量