android 数据储存——SharedPreferences存储(1)

作者:无名 - 软件应用 -

轻轻地我保护--SharedPreferences存储(1)

首先介绍的是SharedPreferences,它是Android提供用来存储一些简单的配置信息的一种机制,例如,一些默认欢迎语、登录的用户名和密码等。其以键值对的方式存储,使得我们可以很方便的读取和存入,下面看一个演示的例子。

1.第一步

在Eclipse中打开ex_SharedPreferences 项目,其步骤如下所示。

(1)新建一个项目。依次单击File→New→Android Project项。

(2)在新建项目的对话框中,选择Create project from existing source项。

(3)单击浏览,找到ex_SharedPreferences项目,然后单击确定。

其程序的目录结构如图8-1所示。

2.第二步

单击运行项目,可以看到主界面如图8-2所示,这个界面的布局信息都在main.xml文件当中,在一个LinearLayout当中放了3个TextView和两个EditView组件,代码如下所示:

android 数据储存——SharedPreferences存储(1)_第1张图片 
(点击查看大图)图8-1  程序目录结构
android 数据储存——SharedPreferences存储(1)_第2张图片 
(点击查看大图)图8-2  主界面
 
 
  1. <xml version="1.0" encoding="utf-8">   
  2. <LinearLayout xmlns:Android="http://schemas. Android.com/apk/res/Android"   
  3.   Android:orientation="vertical"   
  4.   Android:layout_width="fill_parent"   
  5.   Android:layout_height="fill_parent"   
  6.   >   
  7. <TextView     
  8.   Android:layout_width="fill_parent"    
  9.   Android:layout_height="wrap_content"    
  10.   Android:text="SharedPreferences demo"   
  11.   />   
  12. <TextView Android:layout_width="fill_parent"   
  13. Android:layout_height="wrap_content"    
  14. Android:text="Name:" />   
  15. <EditText Android:id="@+id/name"    
  16. Android:layout_width="fill_parent"   
  17. Android:layout_height="wrap_content"    
  18. Android:text="" />   
  19. <TextView Android:layout_width="fill_parent"   
  20. Android:layout_height="wrap_content"    
  21. Android:text="Password:" />   
  22. <EditText Android:id="@+id/password"    
  23. Android:layout_width="fill_parent"   
  24. Android:layout_height="wrap_content"    
  25. Android:password="true"   
  26. Android:text="" />   
  27. </LinearLayout>  

 

8.2  轻轻地我保护--SharedPreferences存储(2)

代码解释:

如上代码表示,使用LinearLayout布局,其中放置3个用来做界面提示的文本框(TextView)组件和两个用于输入Name和Password(注意这里使用了Android:password="true")的编辑框(EditText)组件,运行这个应用,可以看到其界面如图8-2所示。

在图8-2中,我们可以看到,初始状态下两个EditView都是空的,现在输入一些字符,如图8-3所示。

如图8-3所示,我们在Name文本框中输入IceskYsl,在Password文本框中输入Password,然后退出这个应用。我们在应用程序列表中找到这个应用,重新启动,可以看到其使用了前面输入的Name和Password,如图8-4所示。

android 数据储存——SharedPreferences存储(1)_第3张图片 
(点击查看大图)图8-3  输入Name和Password
android 数据储存——SharedPreferences存储(1)_第4张图片 
(点击查看大图)图8-4  重新启动应用
由此可见,应用保存了我们输入的Name和Password,现在来看看其实现的代码,在DBShared Preferences.java文件中,此文件的代码如下所示:
 
 
  1. package us.imnet.iceskysl.db;   
  2.  
  3. import Android.app.Activity;   
  4. import Android.content.SharedPreferences;   
  5. import Android.os.Bundle;   
  6. import Android.widget.EditText;   
  7.  
  8. public class DBSharedPreferences extends Activity {   
  9. public static final String SETTING_INFOS = "SETTING_Infos";   
  10. public static final String NAME = "NAME";   
  11. public static final String PASSWORD = "PASSWORD";   
  12. private EditText field_name;  //接收用户名的组件  
  13. private EditText filed_pass;  //接收密码的组件  
  14.  
  15. /** Called when the activity is first created. */   
  16.      @Override   
  17.      public void onCreate(Bundle savedInstanceState) {   
  18.          super.onCreate(savedInstanceState);   
  19.          setContentView(R.layout.main);   
  20.          //Find VIew   
  21.          field_name = (EditText) findViewById(R.id.name); //首先获取用来输入用户名的组件  
  22.          filed_pass = (EditText) findViewById(R.id. password); //同时也需要获取输入密码的组件  
  23.          // Restore preferences  
  24.          SharedPreferences settings = getShared Preferences(SETTING_INFOS, 0); //获取一个SharedPreferences对象  
  25. String name = settings.getString(NAME, "");   //取出保存的NAME  
  26. String password = settings.getString(PASSWORD, ""); //取出保存的PASSWORD  
  27. //Set value  
  28. field_name.setText(name);  //将取出来的用户名赋予field_name  
  29. filed_pass.setText(password);  //将取出来的密码赋予filed_pass  
  30.  
  31.     }   
  32.        
  33.     @Override   
  34.     protected void onStop(){   
  35.         super.onStop();   
  36. SharedPreferences settings = getSharedPreferences (SETTING_INFOS, 0); //首先获取一个SharedPreferences对象  
  37. settings.edit()   
  38. .putString(NAME, field_name.getText().toString())   
  39. .putString(PASSWORD, filed_pass.getText().toString())   
  40. .commit();   
  41.     } //将用户名和密码保存进去  
  42. }  

8.2  轻轻地我保护--SharedPreferences存储(3)

代码解释:

通过上述代码可以看到,在onCreate中使用findViewById得到两个EditView后,使用getSharedPreferences取得SharedPreferences对象settings,然后使用getString取得其中保存的值,最后使用setText将其值设置为两个EditText的值。

而在程序运行onStop过程,也就是在程序退出时,首先使用getSharedPreferences得到settings;然后调用edit()方法使其处于可以编辑状态,并使用putString将两个EditText中的值保存起来;最后使用commit()方法提交即可保存。

小知识 SharedPreferences保存到哪里去了?

SharedPreferences是以XML的格式以文件的方式自动保存的,在DDMS中的File Explorer中展开到/data/data/<package name>/shared_prefs下,以上面这个为例,可以看到一个叫做SETTING_Infos.xml的文件,如图8-5所示。

 

android 数据储存——SharedPreferences存储(1)_第5张图片 
(点击查看大图)图8-5  SharedPreferences文件
其导出到设备中,可以打开这个文件,看到其代码内容为:
 
 
  1. <xml version='1.0' encoding='utf-8' standalone='yes' >   
  2. <map>   
  3. <string name="PASSWORD">Password</string>   
  4. <string name="NAME">IceskYsl</string>   
  5. </map>  

小知识 我们可以通过「getXXX」函数,从 SharedPreferences中读取不同类型的内容,例如,上面我们使用[getString]读取String类型的内容。

注意 Preferences只能在同一个包内使用,不能在不同的包之间使用。

 

IT人知识库 该篇知识地址:http://www.itpeo.net/15315/3488455.html





rfedfre

struts 设置默认 action

struts 如何设置默认action呢 我要达到的目的是:访问不存在的action时自动跳转到默认的acti... ...

rfedfre

java web开发过程中出现的一些诡异问题

最近工作很忙,开发任务很大,遇到的问题也千奇百怪,现总结如下,希望能够帮到各位. (1)设置struts 的默... ...

rfedfre

《自己动手写框架》1:JS、CSS合并带来的效率提升

JS合并的必要性分析 一、效率因素 一般来说,在一个WEB工程中,需要使用大量的JS,这些JS可能来自许多提供者。... ...

rfedfre

netbeans下 spring mvc 使用JRebel的配置方法

一直使用netbeans开发SSH、spring mvc的项目,每次改动java文件,tomcat都要重新加载一次... ...

rfedfre

Xml cannot be read. CakePHP 2.x

      今天配置项目时总是提示如下错误:    ... ...

rfedfre

Eclipse Attach Source不起作用的问题

在eclipse中点F3 来attach Spring的源代码src时,点击attach不起作用; 经研究: 项... ...

rfedfre

jasper报表及程序调用

按照报表设计的基本原则:报表设计工具设计报表、工程中添加数据报表对象、程序调用打印报表,下面分三个部分大概说明Ja... ...

rfedfre

WebService框架整理(一) Axis1

Axis用过一段时间后就听说Axis2横空出世,继而接触了CXF,如果不赶紧整理,怕是都要遗忘了,今天咱就先整理一下Ax... ...

CSS 图片拼接技术

对于拼接图片的显示,无论是作为背景图使用,还是作为前景图使用,都可以使用CSS完全控制。 下面就以显示以下拼接图片... ...

rfedfre

Webwork Result失效的一个错误

访问Action.不能跳转到指定的jsp页面,有如下异常 java.lang.NoSuchMethodExceptio... ...

rfedfre

【第七章】 对JDBC的支持 之 7.2 JDBC模板类 ——跟我学spring3

  7.2  JDBC模板类 7.2.1  概述 ... ...

rfedfre

求路线

今天群里面有人问了个求路线的问题,贴了递归的方法,我自己写了个一般的方法,速度更快些,就是可读性上不入递归法:) ... ...

rfedfre

【第七章】 对JDBC的支持 之 7.2 JDBC模板类 ——跟我学spring3

  7.2  JDBC模板类 7.2.1  概述 ... ...

rfedfre

VS2008创建C++项目——使用dll文件

网上有许多的文章都在介绍如何创建一个自定义的dll文件,以及如何使用一个dll文件,在此不在赘述。本文主要介绍如何使用... ...

rfedfre

Android ApiDemos示例解析(76):Graphics->Regions

二维图形之间可以通过“加”,“减”,“交”,“异或”等逻辑运算构成新的图形。 本例使用了两个矩形通过“加”,“减”,“... ...

rfedfre

Hibernate Criteria的嵌套查询

假设有Artist和Track实体,是1对多的关系,现在我们想使用Criteria查询所有artist中,其对应的Tra... ...

rfedfre

axis2和JDK1.5开发(文件传输服务)详解一(图解)

1.准备资源:axis2涉及到的jar包和发布环境war包,地址如下: http://apache.mirror.ph... ...

rfedfre

RCP定制自己的搜索插件-实例

本文介绍如何扩展/定制 Eclipse 的搜索插件 org.eclipse.search(后面附实例) &nb... ...

rfedfre

来了兴致,试试django吧,呵呵

虽然不深入技术,但是还是有习惯浏览一下园子的首页,发现有一位兄弟写了一篇python django的翻译文章,不由勾起了... ...

rfedfre

view在UIViewController中的生命周期

理解view的生命周期: 在UIViewController中,view(黑体的view指的是contr... ...