轻轻地我保护--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组件,代码如下所示:

(点击查看大图)图8-1 程序目录结构
(点击查看大图)图8-2 主界面
  
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns: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="SharedPreferencesdemo"
  11. />
  12. <TextViewAndroid:layout_width="fill_parent"
  13. Android:layout_height="wrap_content"
  14. Android:text="Name:"/>
  15. <EditTextAndroid:id="@+id/name"
  16. Android:layout_width="fill_parent"
  17. Android:layout_height="wrap_content"
  18. Android:text=""/>
  19. <TextViewAndroid:layout_width="fill_parent"
  20. Android:layout_height="wrap_content"
  21. Android:text="Password:"/>
  22. <EditTextAndroid: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所示。

(点击查看大图)图8-3 输入Name和Password
(点击查看大图)图8-4 重新启动应用
由此可见,应用保存了我们输入的Name和Password,现在来看看其实现的代码,在DBShared Preferences.java文件中,此文件的代码如下所示:
  
  1. packageus.imnet.iceskysl.db;
  2. importAndroid.app.Activity;
  3. importAndroid.content.SharedPreferences;
  4. importAndroid.os.Bundle;
  5. importAndroid.widget.EditText;
  6. publicclassDBSharedPreferencesextendsActivity{
  7. publicstaticfinalStringSETTING_INFOS="SETTING_Infos";
  8. publicstaticfinalStringNAME="NAME";
  9. publicstaticfinalStringPASSWORD="PASSWORD";
  10. privateEditTextfield_name;//接收用户名的组件
  11. privateEditTextfiled_pass;//接收密码的组件
  12. /**Calledwhentheactivityisfirstcreated.*/
  13. @Override
  14. publicvoidonCreate(BundlesavedInstanceState){
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.main);
  17. //FindVIew
  18. field_name=(EditText)findViewById(R.id.name); //首先获取用来输入用户名的组件
  19. filed_pass=(EditText)findViewById(R.id. password);//同时也需要获取输入密码的组件
  20. //Restorepreferences
  21. SharedPreferencessettings=getShared Preferences(SETTING_INFOS,0);//获取一个SharedPreferences对象
  22. Stringname=settings.getString(NAME,""); //取出保存的NAME
  23. Stringpassword=settings.getString(PASSWORD,""); //取出保存的PASSWORD
  24. //Setvalue
  25. field_name.setText(name);//将取出来的用户名赋予field_name
  26. filed_pass.setText(password);//将取出来的密码赋予filed_pass
  27. }
  28. @Override
  29. protectedvoidonStop(){
  30. super.onStop();
  31. SharedPreferencessettings=getSharedPreferences (SETTING_INFOS,0);//首先获取一个SharedPreferences对象
  32. settings.edit()
  33. .putString(NAME,field_name.getText().toString())
  34. .putString(PASSWORD,filed_pass.getText().toString())
  35. .commit();
  36. }//将用户名和密码保存进去
  37. }

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所示。

(点击查看大图)图8-5 SharedPreferences文件
其导出到设备中,可以打开这个文件,看到其代码内容为:
  
  1. <?xmlversion='1.0'encoding='utf-8'standalone='yes'?>
  2. <map>
  3. <stringname="PASSWORD">Password</string>
  4. <stringname="NAME">IceskYsl</string>
  5. </map>

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

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

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. Android(安卓)HAL实例学习-Jollen的mokoid工程编译篇
  7. Android(安卓)最新面试题
  8. Android(安卓)Studio 完美修改应用包名
  9. Android(安卓)从入门到资深学习路线

随机推荐

  1. 无法使用jquery将活动类添加到当前选定的
  2. C#Razor - 显示注释值,其中循环值等于sele
  3. JavaScript中的事件详解
  4. 如何使用jquery或JavaScript在一次浏览中
  5. javascript小实例,PC网页里的拖拽
  6. 深究js(三)——变量
  7. 尝试用jQuery创建旋转木马效果
  8. js中的indexOf以及startsWith和endsWith
  9. 让Heroku的配置变量在node.js中工作
  10. 版本控制:如何在环境之间控制css和js压缩/