Summary

持久化的3种方法:

  • 普通文件:I/O流操作文件;
  • SharedPreferences:XML文件,通过key-value pair的形式存储数据;
  • SQLite:Android自带数据库

p.s 除了非数据库的方法,其他两种文件存储方法都是使用文件,而且这些文件的目录在rom中定义,因此我们只需关注文件名即可。这么做的原因,我猜是为了方便开发者不用为厂商的各种定制而烦恼吧。


Description

普通文件

使用Android API提供的方法获取相应Input/Output流对象:

  1. Context.openInputFile(String fileName);

    • 返回一个FileInputStream对象;
    • String fileName 为不含目录的文件名,默认目录为/data/data/<package-name>/files/(Nexus系列);
  2. Context.openOutputFile(String fileName, int mode);
    • 返回FileOutputStream对象;
    • String fileName, 同上;
    • int mode 为文件的写入模式,分别有:
      • MODE_PRIVATE 默认方式,即写入的目标文件已经存在的话,直接覆盖原文件;
      • MODE_APPEND 在原文件后添加内容;

ps. 读取模式mode还有MODE_WORLD_READABLE和MODE_WORLD_WRITABLE两种,由于容易引起安全问题,已经在Android 4.2中被废除


SharedPreferences

使用XML文件来对数据进行持久化,并通过操作SharedPreferences的对象来读写数据。

Android提供了3种方法获取SharedPreferences对象:

  1. Context.getSharedPreferences(String fileName, int mode);

    • String fileName 为XML文件的名称,默认目录为/data/data/<package-name>/shared_prefs/(Nexus系列);
    • int mode 规定了文件的不同读写模式:
      • MODE_PRIVATE 只有当前app能对该文件进行读写;
      • MODE_MULTI_PROCESS 允许多个程序对该文件进行读写;
  2. Activity.getPreferences(int mode);
    • 使用Activity名作为文件名,所以只需要定义读写模式即可;
    • int mode 同上;
  3. PreferenceManager.getDefaultSharedPreference(Context context);
    • 使用当前app的包名作为前缀;

(3种获取SharedPreference对象的差别仅在于文件名称的定义,分别是自定义、Activity名和App名作为文件名)

/* 3 ways to get instance of SharedPreferences */
SharedPreferences prefs;
prefs = this.getSharedPreferences("APPLE", MODE_PRIVATE);//Context.getSharedPreferences(String fileName, int mode)
prefs = this.getPreferences(MODE_PRIVATE);//Activity.getPreferences(int mode)
prefs = PreferenceManager.getDefaultSharedPreferences(this);

读取数据:

根据不同的数据类型,使用SharedPreferences对象的get方法即可:

prefs.getString(String key, String defaultValue);

  • String key 为添加数据时使用的key(参考插入数据部分);
  • String defaultValue 通过key取回的数据如果为null时作为默认值代替null;
SharedPreferences prefs = this.getSharedPreferences("People", MODE_PRIVATE);

String name = prefs.getString("name", "David");
int age = prefs.getInt("age", 0);
int gender = prefs.getInt("gender", 0);

添加数据:

通过SharedPreferences.Editor来添加数据,要通过commit()来提交数据。

SharedPreferences prefs = this.getSharedPreferences("People", MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();//获取Editor对象 editor.putString("name", "Luffy");
editor.putInt("age", 32);
editor.putInt("gender", 0);
editor.putString("desc", "Are you kidding me?");
editor.commit(); editor.clear();
editor.putString("name", "Chalotte");
editor.putInt("age", 12);
editor.putInt("gender", 0);
editor.putString("desc", "God blesses");
editor.commit();

SQLite

Android自带数据库。

由于数据库的操作相对复杂,另起篇章说明,详情请点击这里。


Reference 参考

Android:数据持久化(1/2)文件、SharedPreferences的更多相关文章

  1. IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)

    IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSX ...

  2. Android数据持久化技术 — — —SharedPreferences

    SharedPreferences是使用键值对的方式来存储数据. 要想使用SharedPreferences来存储数据,必须获取SharedPreferences对象,获取SharedPreferen ...

  3. Android数据存储(一)----SharedPreferences详解

    一.Android数据的存储方式: Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File:此外还有一种网络存储 ...

  4. IOS开发--数据持久化篇之文件存储(一)

    前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不 ...

  5. Android数据持久化技术 — — —文件存储

    文件保存 package com.example.datastroredtest; import android.app.Activity;import android.os.Bundle;impor ...

  6. Android数据存储之共享参数SharedPreferences

    SharedPreferences是Android的一个轻量级存储工具,采用的存储结构是Key-Value的键值对方式,类似于Java的Properties类,二者都是把Key-Value的键值对保存 ...

  7. android 数据持久化——I/O操作

    上一节中简单的介绍了File的操作,这一节来说说使用android平台自带对象实现文件的基本操作 主要的两个类:openFileOutput(写)和openFileInput(读) 向文件中写如数据代 ...

  8. Android 数据存储02之文件读写

    Android文件读写 版本 修改内容 日期 修改人 V1.0 原始版本 2013/2/25 skywang Android文件读写的有两种方式.一种,是通过标准的JavaIO库去读写.另一种,是通过 ...

  9. <Android基础> (六) 数据存储 Part 1 文件存储方式

    第六章 数据存储 6.1 持久化技术 持久化技术指将内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失. 主要有三种方式用于简单地实现数据持久化功能:文件存储.S ...

  10. $《第一行代码:Android》读书笔记——第6章 数据持久化

    主要讲述了Android数据持久化的三种方式:文件存储.SharedPreference存储.SQLite数据库存储. (一)文件存储 其实Android中文件存储方式和Java的文件操作类似,就是用 ...

随机推荐

  1. 虚拟机 Ubuntu18.04 tensorflow cpu 版本

    虚拟机 Ubuntu18.04 tensorflow cpu 版本 虚拟机VMware 配置: 20G容量,可扩充 2G内存,可扩充 网络采用NAT模式 平台:win10下的Ubuntu18.04 出 ...

  2. Ubuntu 安装 networkx

    参考:ubuntu 下NetworkX的安装和使用 Dependences pip setuptools Commands 1.install networkx sudo pip install ne ...

  3. Gtk基础学习总结(一)

    第一个GTK程序例子: #include <stdio.h> #include <gtk/gtk.h> int main(int argc, char *argv[]) { g ...

  4. Vue 及框架响应式系统原理

    个人bolg地址 全局概览 Vue运行内部运行机制 总览图: 初始化及挂载 在 new Vue()之后. Vue 会调用 _init 函数进行初始化,也就是这里的 init 过程,它会初始化生命周期. ...

  5. 为什么CPU要从单核发展到多核?

    前言 这里首先直接给出结论:CPU从单核发展到多核的原因是如果维持单核,则为了提高CPU性能只能不断提高时钟频率,从而会导致CPU功耗急速上升,导致机箱过热,来不及散热. 历史 2004年,Intel ...

  6. 备注Quartz触发器设置

    corn表达式时间格式: <!-- s m h d m w(?) y(?) -->, 分别对应: 秒>分>小时>日>月>周>年, ●星号(*):可用在所 ...

  7. 第四章 SSL和Proxy高级选项

    在前一章,我们已经学习了HTTP消息如何通过Burp Proxy进行拦截和处理,本章我们将继续学习HTTPS协议消息的拦截和处理. HTTPS协议是为了数据传输安全的需要,在HTTP原有的基础上,加入 ...

  8. confluence+Mysql5.7 版本安装破解

    此篇稍微过下msyql 的处理方案:其他详细请参照上一篇文章地址:https://www.cnblogs.com/flyrock/p/9693327.html mysql 最新版本8.0 有点坑,co ...

  9. Ubuntu下压缩解压文件

    一般来说ubuntu 下带有tar 命令,可以用来解压和压缩之用.但是我们经常要与win下用户打交道,所以要安装一些解压工具如:rar zip 等命令. 如果要需要用到zip工具那么可以: sudo ...

  10. 关于Mac上使用ideviceinstaller操作iPhoneXR等24位UDID设备报“ERROR: Invalid UDID specified”解决办法

    最近新申请了一台iPhone XR, 测试时发现使用ideviceinstaller命令老是报错: Jackeys-MacBook-Pro:~ jackey$ ideviceinstaller -u ...