Android复习之数据存储-SharedPreferences
来源:互联网 发布:welsh算法 编辑:程序博客网 时间:2024/06/04 19:56
SharedPreferences
是什么
SharedPreferences是数据存储方案中持久化技术之一
怎么样
它是一个轻量级的存储类,特别适合用于保存软件配置参数或者保存临时数据。使用 SharedPreferences保存数据,其背后是用xml文件(键值对)存放数据,,它存放在文件系统中的/data/data/<package name>/shared_prefs
目录下。
怎么用
如何获取SharedPreference对象
一般有三种方法:
- Context类中的getSharedPreferences()方法
- Activity类中的getPreferences()方法
- PreferenceManager类中的getDefaultSharedPreferences()方法
方法一:Context类中的getSharedPreferences()方法
使用
//第一种方式通过context类获取 SharedPreferences preferences = getApplicationContext().getSharedPreferences("sky", 0);
这种方法需要传入两个参数name和mode:
由上图可知
name:获取的这个首选项文件的名称。当这个名称的首选项文件不存在时,它将会被创建。
mode:操作首选项的模式。用0或者MODE_PRIVATE
,MODE_WORLD_READABLE
,MODE_WORLD_WRITEABLE
,MODE_MULTI_PROCESS
来控制权限。MODE_PRIVATE
和直接传入0效果一样,表示只有当前的应用程序才可以对该SharedPreferences文件进行读写;MODE_MULTI_PROCESS
则一般用于多个进程对同一个SharedPreferences文件进行读写的情况,MODE_WORLD_READABLE
表示外部可读,MODE_WORLD_WRITEABLE
表示外部可写。
方式二:Activity类中的getPreferences()方法
使用
preferences = this.getPreferences(0);
这种方式只需要传入一个操作模式,而文件名自动为当前Activity的类名,参数解释和方法一一样,不重复记录。
方式三:PreferenceManager类中的getDefaultSharedPreferences()方法
该方法为静态方法,只有一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。
使用
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
注意:
通过Context获得的SharedPreferences对象能被同一个应用中的所有Activity访问;
通过Activity获得的SharedPreferences对象,若其它Activity想获得该SharedPreferences文件,则只能通过Context类中的getSharedPreferences()方法获取SharedPreferences对象,当然文件名必须是该SharedPreferences文件名
如何向SharedPreference中存入数据
保存数据步骤:
- 调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor(内部类)对象;
- 通过Editor的putXXX()方法向Editor对象中添加数据;
- 调用Editor的commit()方法提交数据,完成数据存储操作。
基础使用,以第一种为例
SharedPreferences preferences = getApplicationContext().getSharedPreferences("sky", MODE_PRIVATE); SharedPreferences.Editor edit = preferences.edit(); edit.putString("Sky","i appreciate the man who are good at android"); edit.commit();
这样就保存了一个key为Sky的String值
在/data/data/com.cd.storagedemo/shared_prefs 文件夹下查看有一个Sky
的xml文件导出到桌面,使用notpad++查看,如图
这样说明像SharedPreference中保存值已经操作成功了。
如何向SharedPreference中读取数据
通过SharedPreferences对象的getXXX()可以获取对应的数据,getXXX()方法接收两个参数,第一个参数是键(存数据时使用的键名),第二个参数为默认值,即当找不到对应的键时返回该值。
如图
获取刚刚保存的值
String sky = preferences.getString("Sky", "null"); Log.d("MainActivity", "取到的保存的值" + sky);
打印结果
清空保存的数据
//获取到编辑器 SharedPreferences.Editor edit1 = preferences.edit(); //清空数据 edit1.clear(); //提交 edit1.commit();
如图刚刚的数据已经被清空了。
补充
1,保存数据,一般在onPause
方法中代码如下:
@Overrideprotected void onPause(){ super.onPause(); SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("Sky",0); //SharedPreferences sharedPreferences = this.getPreferences(0); //SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("Sky","i appreciate the man who are good at android"); editor.commit();}
2,读取数据一般在onResume
中,代码如下
@Overrideprotected void onResume(){ super.onResume(); SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("Sky",0); String sky= sharedPreferences.getString("Sky","null");}
3,它提供了多种数据类型的存储,包括:int
、long
、boolean
、float
、String
以及string 集合
4,存储格式为xml
格式
参考博客
http://blog.csdn.net/wangyongge85/article/details/45305717
- Android复习之数据存储-SharedPreferences
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android--数据存储之SharedPreferences
- android数据存储之SharedPreferences
- Android之数据存储SharedPreferences
- Android数据存储之SharedPreferences
- android数据存储之--------- SharedPreferences
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android----数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android之SharedPreferences数据存储
- Android数据存储之SharedPreferences
- [Android] Retrofit2.0 GET和POST方式请求
- javascript中面向对象的程序设计——继承
- cubemx导致No target conncted解决方法
- useradd 命令详解
- tensorflow学习之常用函数总结:tensorflow官方例子中的诸如tf.reduce_mean()这类函数
- Android复习之数据存储-SharedPreferences
- Ubuntu14.04 gedit中文乱码问题
- C++中“重载“、“ 覆盖”、“隐藏”的区别分析
- 阿里云服务器之Tomcat环境搭建以及域名绑定
- 控件对图片的操作,改变透明度、大小、方向(学习笔记)
- HDU 5131 Song Jiang's rank list(2014亚洲区广州站现场赛)
- Codeforces Round #354 (Div. 2) D. Theseus and labyrinth(bfs)
- ubuntu14.04安装intel openCL
- Python中的赋值以及深复制和浅复制(深拷贝和浅拷贝)