Android学习笔记(十三)SharedPreference必须掌握的基础
我们在开发中,应用程序会保存少量数据,例如一些字符串、一些标记或者一些配置文件,这时候如果去使用SQLite保存这些数据的话,难免会显得大材小用,用起来也不方便,对于这种信息,保存在SharedPreferences中在合适不过了。
一、SharedPreferences简介。
1、SharedPreferences是一种轻型的存储方式,它的原理是基于xml文件存储key-value键值对数据,通常用来存储一些简单的配置信息。存储位置:/data/data/{包名}/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
2、SharedPreferences对象与SQLite数据库相比,更加的轻量级,不需要创建数据库,创建表,写SQL语句等一系列的操作。美中不足的是SharedPreferences只支持一下几种类型的数据:
boolean、 int 、float、 long、String
3、SharedPreferences本身是一个接口,程序无法直接创建它的实例,只能通过Context提供的getSharedPreferences(String name, int mode)来获取它的实例,该方法的第二个参数支持如下几个值:
· Context.MODE_PRIVATE :只被本地程序读写。
· Context.MODE_WORLD_READABLE :能被其他程序读。
· Context.MODE_WORLD_WRITEABLE :能被其他程序读、写。
4、SharedPreferences的常用方法如下:
· boolean contans(String key) :判断SharedPreferences中是否包含特定key的数据。
· abstract Map<String, ?> getAll() :获取全部的key-value键值对。
· boolean getXxx(String key, xxx default) : 获取指定key对应的值,如果该key不存在,返回default值。
还有一点就是,它也不支持条件查询等等,所以尽管SharedPreferences操作起来非常方便,但它也只能作为存储方式的一种补充,而无法完全替代SQLite数据库等其他数据存储方式。
二、Editor简介
SharedPreferences本身没有提供写入数据的方法,而是通过SharedPreferences的对象调用editor()方法获取Editor对象来写入数据。Editor的常用方法如下:
· clear() :清空SharedPreferences里所有数据。
· putXxx(String key, xxx value) :向SharedPreferences中写入数据。
· remove(String key) :删除SharedPreferences中指定key的值。
· commit() :当Editor编辑完,该方法提交修改。
三、用一个例子来说明SharedPreferences的用法
下面将以一个简单的例子来说明SharedPreferences是怎么来用的。
1、首先创建一个布局文件activity_main,同时在布局文件中放置四个空间,分别是:输入框、读取、写入和清除。读取代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
> <EditText
android:id="@+id/et_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" > <requestFocus />
</EditText> <Button
android:id="@+id/btn_read"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="读取" /> <Button
android:id="@+id/btn_write"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="写入" /> <Button
android:id="@+id/btn_clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="清除" /> </LinearLayout>
布局文件非常简单,这里就不一一分析了。
2、然后创建MainActivity,并在MainActivity实现对SharedPreferences的写入、读取、清楚等相关操作,代码如下:
/**
* MainActivity
*
* @author liuwei
*
*/
public class MainActivity extends Activity {
private SharedPreferences preferences;
private Editor editor;
EditText et_data;
Button btn_read;
Button btn_write;
Button btn_clear; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_data = (EditText) findViewById(R.id.et_data);
btn_read = (Button) findViewById(R.id.btn_read);
btn_write = (Button) findViewById(R.id.btn_write);
btn_clear = (Button) findViewById(R.id.btn_clear);
preferences = getPreferences(Activity.MODE_PRIVATE);
editor = preferences.edit();
btn_read.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
String str = preferences.getString("key", "没有该数据");
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT)
.show();
}
});
btn_write.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
editor.putString("key", et_data.getText().toString());
if (editor.commit()) {
Toast.makeText(getApplicationContext(), "写入成功",
Toast.LENGTH_SHORT).show();
}
}
});
btn_clear.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
editor.clear();
if (editor.commit()) {
Toast.makeText(getApplicationContext(), "清除成功",
Toast.LENGTH_SHORT).show();
} }
});
}
}
代码分析:
(1)代码中首先创建了SharedPreferences和Editor的对象,并在onCreate()方法中对它们作了初始化操作。
(2)通过editor.putString()方法是下了写入数据,数据时以键值对的形式写入的。
(3)通过SharedPreferences对象的getString(key, default)方法,即可获取对应key的值,这里的第二个参数default为在没有key对应的数据时的默认值,可由我们自行赋值。
(4)最后可以可通过editor.clear()方法,对SharedPreferences进行清空操作。
注:对Editor对象的操作,操作完后需要执行commit方法。同时editor.commit()方法会返回一个boolean值,执行成功返回true,执行失败返回false。
本文链接:http://www.cnblogs.com/codingblock/p/4887436.html
声明:本文欢迎任何形式的转载,但请务必保留本文链接,谢谢!
Android学习笔记(十三)SharedPreference必须掌握的基础的更多相关文章
- 【转】Pro Android学习笔记(十三):用户界面和控制(1):UI开发
目录(?)[-] UI开发 方式一通过XML文件 方式二通过代码 方式三XML代码 UI开发 先理清一些UI概念: view.widget.control:这三个名词其实没有什么区别,都是一个UI元素 ...
- 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner
目录(?)[-] GridView Spinner GridView GridView是网格状布局,如图所示.在了解ListView后,很容易了解GridView.下面是例子的XML文件. <? ...
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...
- Android 学习笔记之Volley(七)实现Json数据加载和解析...
学习内容: 1.使用Volley实现异步加载Json数据... Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...
- Android学习笔记进阶之在图片上涂鸦(能清屏)
Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- java之jvm学习笔记十三(jvm基本结构)
java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...
- udacity android 学习笔记: lesson 4 part b
udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...
- Go语言学习笔记十三: Map集合
Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...
随机推荐
- 关于C++对汉字拼音的处理(3)
之所以汉字转拼音的博文能出到3,主要是因为没有很完美的C++的解决方案,但是写到了这里可以有一个小结了. 以前的方法都有这种那种弊端,如果出现了无法识别的汉字(简体的)就无法修改处理了,但是下面的这种 ...
- mysql 5.7安装脚本
[root@HE2 ~]# cat mysql_auto_install.sh ###### 二进制自动安装数据库脚本root密码MANAGER将脚本和安装包放在/root目录即可########## ...
- Python中dict详解
from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...
- 判断JS对象是否拥有某属性的方法举例
判断JS对象是否拥有某属性 JS是否拥有某属性的判断方法,这里提供两种方式,供大家参考. 1.in 运算符 var obj = {name:'jack'}; alert('name' in obj); ...
- 基于jQuery的图片左右轮播,基本原理通用
毕竟新人,写点基础的小东西,希望能和大家沟通交流,提高自己的水平. 这个是应用较多的轮播部分,希望能和大家分享一下思路,拓宽视野. 话不多说,上内容. 我的思路很简单就是通过判断index值的大小变化 ...
- php PHP_EOL 常量
换行符 unix系列用 \n windows系列用 \r\n mac用 \r PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性 <?php echo PHP_EOL; //win ...
- ubuntu sudo
sudo(substitute user 或者 superuser do),是一种程序, 以允许用户通过安全的方式使用特殊的权限运行程序(通常为系统的超级 用户) 语法 sudo [-bhHpV][- ...
- DIV+CSS 网页布局之:混合布局
1.混合布局 在了解了一列.两列和三列布局之后,混合布局也就不难理解了,混合布局也可以叫综合型布局,那么混合布局就可以在一列布局的基础之上,分为两列布局,三列布局,网页布局的结构普遍都是三列布局,但是 ...
- echo、print、print_r、printf、sprintf、var_dump的区别比较
一.echoecho() 实际上不是一个函数,是php语句,因此您无需对其使用括号.不过,如果您希望向 echo() 传递一个以上的参数,那么使用括号会发生解析错误.而且echo是返回void的,并不 ...
- 关于优化C#程序的五十种方法
一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定,使用属性可以获得数据绑定的好处: 2.在属性的get和set访问器重可使用lock添加多线程的支持. 二.readonly(运行时常量) ...