关闭

Android数据存储之:SharedPreferences

标签: androidandroid应用
205人阅读 评论(0) 收藏 举报
分类:

转载来自: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();
}




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:64591次
    • 积分:1127
    • 等级:
    • 排名:千里之外
    • 原创:54篇
    • 转载:30篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论