Android的数据存储

Android的数据存储技术

本地数据存取技术

  • SharedPreferences(XML格式数据)
  • File(二进制数据为主)
  • SQLite(关系型数据)

远程数据存储技术

  • 基于Socket使用TCP/IP直接访问网络服务器(数据从数据源直接传送到目的地)。
  • 基于HTTP相关协议访问Web服务 (从互联网上获取HTML、json/xml、二进制格式的数据)

SharedPreferences

基本特点

  • 数据以“key-value"方式存储与处理
  • 数据明文存储于xml文件中
  • Android内置相应数据存取组件,使用简单方便

适用场景

  • 比较适合于保存少量的数据,更新不频繁,不需要进行复杂的查询,并且对安全性没有太大要求的场合。

SharedPreferences存储的应用场景

  1. SharedPreferences存储是Android系统中最容易使用的存储技术,是一种轻量型的Android数据存储方案,主要用于保存应用程序的一些配置信息,如登录的用户信息、播放音乐退出时的状态、设置选项等。
  2. 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,只是一个数据块,完全按照输入存放(即没有准换)

你可能感兴趣的:(Android的数据存储)