转载来自:http://www.cnblogs.com/wisekingokok/archive/2011/09/16/2177833.html
SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。(比如存储用户简单的登录信息,之后方便直接查询。比如存储一个键值对来判断是不是刚安装软件,以此进入引导页面)其存储位置在/data/data/<包名>/shared_prefs目录下。
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。实现SharedPreferences存储的步骤如下:
一、根据Context获取SharedPreferences对象
二、利用edit()方法获取Editor对象。
三、通过Editor对象存储key-value键值对数据。
四、通过commit()方法提交数据。
具体实现代码如下:
Context context = ConfirmOrderActivity.this; SharedPreferences sp = context.getSharedPreferences("userCache", MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.putString("username", username); editor.putInt("INT_KEY", 0); editor.putBoolean("BOOLEAN_KEY", true); editor.commit();
getSharedPreferences(name,mode)
name为本组件的配置文件名(如果想要与本应用程序的其他组件共享此配置文件,可以用这个名字来检索这个件)
mode为操作模式,默认的模式为0或MODE_PRIVATE,还可以使用MODE_WORLD_READABLE和 MODE_WORLD_WRITEABLE。
取值:
//getXxx(key,defValue) //如果preference存在,则返回preference的值,否则返回defValue sp.getString("STRING_KEY", "none"); sp.getBoolean("BOOLEAN_KEY", true);
这段代码执行过后,即在/data/data/com.test/shared_prefs目录下生成了一个SP.xml文件,一个应用可以创建多个这样的xml文件。如图所示:
SP.xml文件的具体内容如下:
1 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
2 <map>
3 <string name="STRING_KEY">string</string>
4 <int name="INT_KEY" value="0"/>
5 <boolean name="BOOLEAN_KEY" value="true"/>
6 </map>
在程序代码中,通过getXXX方法,可以方便的获得对应Key的Value值,如果key值错误或者此key无对应value值,SharedPreferences提供了一个赋予默认值的机会,以此保证程序的健壮性。如下图运行结果中因为并无值为"NOT_EXIST"的Key,所以Log打印出的是其默认值:“none”。在访问一个不存在key值这个过程中,并无任何异常抛出。
SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其只能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。
应用实例:app的引导页面的实现(只有刚安装的时候进入)
实现的重点是解决为什么安装完成后,第一次进入时有引导页面,之后再打开app,都不会出现。
原理:使用SharedPreferences
在欢迎页面中加判断是不是第一次进软件,用preferences.getBoolean("firststart", true),第一次进软件的时候,这个不会找到值,所以用默认的true,这个时候跳转到引导页面,同时更改"firststart"的值:editor.putBoolean("firststart", false);下次进入的时候,if判断就为false,所以不跳引导页面,直接执行欢迎页面
SharedPreferences preferences = getSharedPreferences("phone", Context.MODE_PRIVATE); SharedPreferences.Editor editor; // 判断是不是首次登录, if (preferences.getBoolean("firststart", true)) { //getBoolean(key,defValue)参数 key->获取的preference的名称, //defValue 当此preference不存在时返回的默认值 //如果preference存在,则返回preference的值,否则返回defValue。 editor = preferences.edit(); // 将登录标志位设置为false,下次登录时不在显示首次登录界面 editor.putBoolean("firststart", false); editor.commit(); Intent intent = new Intent(SplashActivity.this,GuideActivity.class); startActivity(intent); finish(); }