Android:数据持久化(1/2)文件、SharedPreferences
Summary
持久化的3种方法:
- 普通文件:I/O流操作文件;
- SharedPreferences:XML文件,通过key-value pair的形式存储数据;
- SQLite:Android自带数据库
p.s 除了非数据库的方法,其他两种文件存储方法都是使用文件,而且这些文件的目录在rom中定义,因此我们只需关注文件名即可。这么做的原因,我猜是为了方便开发者不用为厂商的各种定制而烦恼吧。
Description
普通文件
使用Android API提供的方法获取相应Input/Output流对象:
- Context.openInputFile(String fileName);
- 返回一个FileInputStream对象;
- String fileName 为不含目录的文件名,默认目录为
/data/data/<package-name>/files/(Nexus系列);
- 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对象:
- Context.getSharedPreferences(String fileName, int mode);
- String fileName 为XML文件的名称,默认目录为
/data/data/<package-name>/shared_prefs/(Nexus系列); - int mode 规定了文件的不同读写模式:
- MODE_PRIVATE 只有当前app能对该文件进行读写;
- MODE_MULTI_PROCESS 允许多个程序对该文件进行读写;
- String fileName 为XML文件的名称,默认目录为
- Activity.getPreferences(int mode);
- 使用Activity名作为文件名,所以只需要定义读写模式即可;
- int mode 同上;
- 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的更多相关文章
- IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)
IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSX ...
- Android数据持久化技术 — — —SharedPreferences
SharedPreferences是使用键值对的方式来存储数据. 要想使用SharedPreferences来存储数据,必须获取SharedPreferences对象,获取SharedPreferen ...
- Android数据存储(一)----SharedPreferences详解
一.Android数据的存储方式: Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File:此外还有一种网络存储 ...
- IOS开发--数据持久化篇之文件存储(一)
前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不 ...
- Android数据持久化技术 — — —文件存储
文件保存 package com.example.datastroredtest; import android.app.Activity;import android.os.Bundle;impor ...
- Android数据存储之共享参数SharedPreferences
SharedPreferences是Android的一个轻量级存储工具,采用的存储结构是Key-Value的键值对方式,类似于Java的Properties类,二者都是把Key-Value的键值对保存 ...
- android 数据持久化——I/O操作
上一节中简单的介绍了File的操作,这一节来说说使用android平台自带对象实现文件的基本操作 主要的两个类:openFileOutput(写)和openFileInput(读) 向文件中写如数据代 ...
- Android 数据存储02之文件读写
Android文件读写 版本 修改内容 日期 修改人 V1.0 原始版本 2013/2/25 skywang Android文件读写的有两种方式.一种,是通过标准的JavaIO库去读写.另一种,是通过 ...
- <Android基础> (六) 数据存储 Part 1 文件存储方式
第六章 数据存储 6.1 持久化技术 持久化技术指将内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失. 主要有三种方式用于简单地实现数据持久化功能:文件存储.S ...
- $《第一行代码:Android》读书笔记——第6章 数据持久化
主要讲述了Android数据持久化的三种方式:文件存储.SharedPreference存储.SQLite数据库存储. (一)文件存储 其实Android中文件存储方式和Java的文件操作类似,就是用 ...
随机推荐
- C#实现日历样式的下拉式计算器
C#实现日历样式的下拉式计算器 原文地址:http://developer.51cto.com/art/201508/487486.htm 如果我们正在做一个类似于库存控制和计费系统的项目,有些部分可 ...
- mac下搭建基于vue-cli 3.0的Element UI 项目
1.安装yarn管理工具(包含node.js); 2.安装全局vue-cli全家桶: yarn global add @vue/cli 3.创建.测试一个vue-cli项目: vue create a ...
- 【Semantic Segmentation】Segmentation综述
部分转自:https://zhuanlan.zhihu.com/p/37618829 一.语义分割基本介绍 1.1 概念 语义分割(semantic segmentation) : 就是按照" ...
- php入门(一)
一,在HTML中嵌入php代码 先看html的代码: <form action="processorder.php" method="post"> ...
- 决策树的剪枝,分类回归树CART
决策树的剪枝 决策树为什么要剪枝?原因就是避免决策树“过拟合”样本.前面的算法生成的决策树非常的详细而庞大,每个属性都被详细地加以考虑,决策树的树叶节点所覆盖的训练样本都是“纯”的.因此用这个决策树来 ...
- java:历史回顾
1.String和StringBuffer区别 2.Runtime和System类,包括对象垃圾收集 Rumtime.gc() System.gc() 调用的其实就是Runtime的gc回收 3.da ...
- PIL.Image与Base64 String的互相转换
https://www.jianshu.com/p/2ff8e6f98257 PIL.Image与Base64 String的互相转换 mona_alwyn 2018.01.18 19:02* 字数 ...
- 【转】SQL SERVER 2005中如何获取日期(一个月的最后一日、上个月第一天、最后一天、一年的第一日等等)
在网上找到的一篇文章,相当不错哦O(∩_∩)O~ //C#本周第一天 int dayOfWeek = Convert.ToInt32(DateTime.Now.DayOfWeek ...
- python使用安装ipdb
1.安装 python3版本直接执行pip install ipdb命令安装 python2.7版本的需要指定ipdb的版本 pip install ipdb==0.10.2 等号后面的就是版本,因为 ...
- yii控制布局方式
1:在控制器内成员变量设置 public $layout = false; //不使用布局 public $layout = “main”; //设置使用的布局文件 2:在控制器成员方法内设置 $th ...