Android的数据存储技术
本地数据存取技术
- SharedPreferences(XML格式数据)
- File(二进制数据为主)
- SQLite(关系型数据)
远程数据存储技术
- 基于Socket使用TCP/IP直接访问网络服务器(数据从数据源直接传送到目的地)。
- 基于HTTP相关协议访问Web服务 (从互联网上获取HTML、json/xml、二进制格式的数据)
SharedPreferences
基本特点
- 数据以“key-value"方式存储与处理
- 数据明文存储于xml文件中
- Android内置相应数据存取组件,使用简单方便
适用场景
- 比较适合于保存少量的数据,更新不频繁,不需要进行复杂的查询,并且对安全性没有太大要求的场合。
SharedPreferences存储的应用场景
- SharedPreferences存储是Android系统中最容易使用的存储技术,是一种轻量型的Android数据存储方案,主要用于保存应用程序的一些配置信息,如登录的用户信息、播放音乐退出时的状态、设置选项等。
- SharedPreferences将一些简单数据类型的数据,心键值对的形式保存在应用程序的私有Preferences目录中。SharedPreferences对象本身只能获取数据,数据的存储和修改只能通过SharedPreferences内部接口Editor来实现。
获取SharedPreferences对象
- Context.getSharedPreferences(String name, int mode)
- name为文件名
- mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE - Activity.getPreferences(int mode)
- 使用当前不带包名的类名作为文件的名称
- mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE
使用文件保存数据
基本特点
- 可以保存任意类型、任意大小的数据,但是需要自行编写数据解析代码
- Android使用标准Java编程方式, 通过Stream(及派生或组合类型)存取底层文件
适用场景
- 保存二进制的, 数据量较大的数据(比如照片、视频等)
- 有特殊格式的文本型数据
- 有特殊处理需求的数据(比如数据需要加密后存储)
使用关系数据库存储数据
基本情况
- Android内置对SQLite的支持,在android.database.sqlite包中提供了相应的组件
- SQLite是一种单用户单文件型数据库,文件保存于本机内置存储空间,占用系统资源小 ,适合于手机这种内存受限的运行环境
- 如果其它App需要访问这些数据,可以使用Content Provider
适用场景
- 以文本型数据为主
- 需要进行频繁的CRUD操作
手机、PC、智能设备之间数据直传
基本情况
- Android应用中,可以使用java.net和android.net包中的类,基于TCP/IP协议(或其他网络协议)创建网络应用程序,完成数据存取任务)
典型场景
- 手机通过无线WIFI连入了局域网,需要与PC通讯
- 各手机或相关只能设备之间短距离(比如通过蓝牙、NFC、USB)直接交换数据
从互联网下载和上传数据
基本情况
- Android内置HTTP组件,可以访问互联网
- Android内置对Xml和Json格式数据的解析组件
- 有大量第三方组件可以访问互联网
应用场景
- 一些互联网公司提供远程数据存取服务,它们向外界开放API(通常是RESTful服务),Android应用可以调用这些API,提取或保存数据
文件存取
- 所有的Android设备都有两个文件存储区域:内部存储和外部存储。内部存储都是指手机内部(这并不是说外部存储就是指的手机的外部SD卡之类的,外部存储物理上来说也有可能是在手机内部)。
- 内部存储中的文件只有您的应用本身可以访问,当用户卸载应用后,系统会从内部存储中移除您的应用中的所有文件。使用内部存储不需要申请权限。
- 外部存储是相对于内部存储而言的,不过存储在这上面的文件是所有者可见的,所有人都有权限操作,不过前提是需要申请权限
内部存储
API
-
操作内部存储的api都是Context类的
-
getFilesDir():返回文件系统上特定应用程序的文件目录的绝对路径;返回一个File对象,它的目录是
data/data/包名/files -
getCacheDir():返回文件系统上应用程序的缓存目录的绝对路径;返回一个File对象,它的目录是 :
data/data/包名/cache
外部存储
- 做外部存储操作之前一定要判断外部存储状态
- 要在外部存储上读取或写入文件,您的应用必须获取系统权限
- 检测完外部存储是否可读或可写,getExternalStorageState()方法可返回检测的状态。
SQLite存储
** SQLite的基本概念**
- Android系统内建了SQLite。可以在所有主流的操作系统上运行,支持大多数计算机语言。它支持的相信类型可有5种,但实际上它也接收varchar、char、decimal等类型,SQLite会在运算或保存时将它们转换为对应的5种数据类型。
SQLite数据类型
- NULL,值是NULL
- INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放
- REAL,值是浮点型值,以8字节IEEE浮点数存放
- TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放
- BLOB,只是一个数据块,完全按照输入存放(即没有准换)