Android开发系列——实战篇9:数据的存储

本文介绍Android应用程序数据的存储方式。

一、简介

任何一种开发方式都会涉及到数据的存储,Android开发也不例外,并且相关的数据存储操作十分频繁。
与Android有关的数据存储方式大致分为五种:

  • 共享参数SharedPreferences
  • 文件存储
  • 数据库SQLite
  • Content Provider

二、Android数据存储

1.共享参数SharedPreferences

SharedPrefernces通常用于保存少量的,格式简单的数据(字符串,基本类型值等),也可以用于保存应用的配置信息(震动,用户积分、音效等),以及解锁口令的密码之类。

SharedPreferences原理

  • 它是一种基于XML文件存储的Key-Value键值。
  • 其对象本身是用来获取数据,并不支持存储或修改。
  • 如有存储修改需求,可以调用SharedPreferences.editor()方法的Editor对象实现。

SharedPreferences存储模式

由于SharedPreferences本身是一个接口,无法直接创建实例,需要通过Context Mode来获取,SharedPreferences总共有四种存储模式:

  • Context.MODE_PRIVATE
  • Context.MODE_APPEND
  • Context.MODE_WORLD_READABLE
  • Context.MODE_WORLD_WRITEBLE

常用的是第一二种,一般使用第一种,在APP内部操作数据。基本不用后两种。

SharedPreferencs用法

  • 在使用共享参数之前,要先调用getSharedPreferences函数声明文件名与操作模式:
SharedPreferences shared = getSharedPreferences("share",MODE_PRIVATE)

从getSharedPrefernces中获取的第一个方法是存储的文件名,以share.xml的文件形式存储,第二个参数是操作模式MODE_PRIVATE,表示私有模式。

  • 对共享参数的存储数据要要借助Editor类,通常会用到四种方法:putXXX(key,value) ; remove() ; commit() ; clear(); 示例代码:
//获取编辑器对象
SharedPreferences Editor editor = shared.edit();
//添加一个键为name的字符串参数
editor.putString("name","Mr Zhao");
//添加一个键为age的整型参数
editor.putInt("age","23");
//添加一个键为married的布尔型参数
editor.putBoolean("married","false");
//添加一个键为weight的浮点型参数
editor.putFloat("weight","150f")
//提交编辑器中的修改,必须的一行代码
editor.commit();
  • 共享参数读取数据较为简单,直接使用对象即可完成数据读取方法的调用(get方法中的第二个参数为默认值),示例代码:
//从共享参数中获取键为name的字符串
String name = shared.getString("name","")
//获取键为age的整型数
int age = shared.getInt("age",0);
//获取键为married的布尔数
boolean married = shared.getBoolean("married",false);
//获取键为weight的浮点数
float weight = shared.getFloat("weight",0);

2.SD卡与文件存储

简介

一般在数据较小,轻量级是考虑用共享参数,而数据较大时考虑用文件存储。
手机空间一般分为内部存储和外部存储(SD卡),以前的SD卡是可拔插式的外部存储卡,后来越来越多的手机把SD卡集成到手机内部,但是还是称为外部存储,但是现在一般很少用到SD卡进行数据存储。

文件目录信息及获取

每一个APP在创建时都会在在内部有一个专门存放数据的私有文件夹,这个文件夹只有APP本身就有读写权限,其他APP是无法进行访问的,这就保证了数据的安全与私密。
在这个私有文件夹中读写数据可以使用Java的构造器FileInputStream和FileOutputStream,也可以使用Android特有的类和方法Context.openFileInput和Context.openFileOutput。
这个私有文件夹存放在/data/com.xxx.xxx/files文件夹下,具体可以通过getDownloadCacheDirectory()来查询具体路径。
有关文件目录信息可以通过Environment类来查询,该类是APP获取各种目录信息的工具,主要方法有以下7种:

  • getRootDirectory():获取系统根目录的路径。
  • getDataDirectory():获取系统数据目录的路径。
  • getDownloadCacheDirctory():获取下载缓存目录的路径。
  • getExternalStorageDirctory():获取外部存储(SD卡)的路径。
  • getExternalStorageState():获取SD卡的状态。

文件存储实例项目

下面通过一个简单的项目,对文件存储加深理解。
通过自定义一个编辑框,在编辑框中编辑数据,然后通过按钮将数据存储到APP的私有文件夹中。

  • 首先布局文件activity_main.xml,具体代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/file_edit"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_marginTop="100dp"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_below="@+id/file_edit"
        >
        <Button
            android:id="@+id/file_add"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="add"
            />

        <Button
            android:id="@+id/file_read"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:text="read"
            />

    </LinearLayout>

</LinearLayout>

效果如图:

  • 然后在MainActivity.java类中,具体代码:

3.数据库SQLite(重要)

SQLite介绍

在大量数据的存储与增删改查的操作中使用文件存储的话效率极低。
SQLite是用C语言编写的开源式嵌入式数据库,占用资源极少,只需要几百几千字节即可运行。
SQLite具有轻量级、独立性、隔离性、跨平台、多语言接口、安全性的特征,广泛应用于各种移动端设备的存储数据库。
Android标准库包含SQLite库以及配套Java辅助类。

SQLite命令

与关系数据库进行交互的标准 SQLite 命令类似于 SQL。命令包括 CREATE、SELECT、INSERT、UPDATE、DELETE 和 DROP。这些命令基于它们的操作性质可分为以下几种:

DDL - 数据定义语言

DML - 数据操作语言

DQL - 数据查询语言

SQLite具体操作

https://www.runoob.com/sqlite/sqlite-intro.html

4.Content Provider

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值