在开发的过程中我们必须遇到的就是如何对用户的数据进行有效的存储以及读取。我们举个例子,现在我们使用app,当我们登陆一个账号的时候选择记住密码软件就会记住我们的账号以及密码,我们退出当前账号,就可以直接点击登陆进入账号内部,而不需要再输入账号和密码了。那么这就是今天我们要说的,如何对用户输入的账号以及密码进行存储,并且进行显示。这里我们使用到了google工程师向我们推荐的一个API——SharedPreferences。

  • 关于SharedPreferences

它是android.content下的一个接口,官方对他的描述是这样的:用于访问和修改getSharedPreferences(String, int)返回偏好设置数据(preference data)的一个接口。对于任何一组特殊的preferences,所有的客户端共享一个此类单独的实例。修改Preferences必须通过一个SharedPreferences.Editor对象,以确保当他们提交存储数据的操作时,preference值保持一致的状态。最后再提交数据的时候必须使用commit()方法将数据完全写入。

它的优点在于会对一些特殊的字符进行分辨,达到准确读取的目的,传统上我们选择以特殊分隔符来分割要存储的数据,这样虽然会简单点,但是如果用户舌设置的数据同样包含这个分隔符,那么将造成读取失误。

  • 关于SharedPreferences的实例

这里我只介绍关键代码,整个工程可以在该链接下载:http://files.cnblogs.com/files/ghylzwsb/shareprefenrence.rar


1、使用saveUserInfo()方法来存储用户的数据:

   /**
* 保存用户名 密码的业务方法
* @param context 上下文
* @param username 用户名
* @param pas 密码
* @return true 保存成功 false 保存失败
*/
public static void saveUserInfo(Context context,String username,String pas){
/**
* SharedPreferences将用户的数据存储到该包下的shared_prefs/config.xml文件中,
* 并且设置该文件的读取方式为私有,即只有该软件自身可以访问该文件
*/
SharedPreferences sPreferences=context.getSharedPreferences("config", context.MODE_PRIVATE);
Editor editor=sPreferences.edit();
//当然sharepreference会对一些特殊的字符进行转义,使得读取的时候更加准确
editor.putString("username", username);
editor.putString("password", pas);
//这里我们输入一些特殊的字符来实验效果
editor.putString("specialtext", "hajsdh><?//");
editor.putBoolean("or", true);
editor.putInt("int", 47);
//切记最后要使用commit方法将数据写入文件
editor.commit();
}

2、当用户重新打开软件时使用如下代码将其显示出来:

      //显示用户此前录入的数据
SharedPreferences sPreferences=getSharedPreferences("config", MODE_PRIVATE);
String username=sPreferences.getString("username", "");
String password =sPreferences.getString("password", "");
ed_username.setText(username);
ed_pasw.setText(password);

3、软件运行之后我们可以发现config.xml文件的内容如下:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="specialtext">hajsdh&gt;&lt;?//</string>
<string name="username">dsa</string>
<string name="password">dasdasd</string>
<int name="int" value="47" />
<boolean name="or" value="true" />
</map>

我们看到,在xml文件中“><”被转以为“&gt;&lt;”,这也为数据的准确读取做好了规范。

以下是程序运行的结果:


  • 总结

至此SharedPreferences的应用结束。在以后的开发过程中,应当多家注意使用官方推荐的API,这会对数据的安全以及数据的完整性有所保障。

2016-04-16

BOB

使用 SharedPreferences 实现数据的存储和读取的更多相关文章

  1. 在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除。

    在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除. 作者:邵盛松 2009-09-05 前言 1关于的BLOB(Binary)数据的存储和读取功能主要参考了MSDN上的一篇& ...

  2. Numpy用于数组数据的存储和读取

    Python的Numpy模块可用于存储和读取数据: 1.将一个数组存储为二进制文件 Numpy.save:将一个数组以.npy的格式保存为二进制文件 调用格式:numpy.save(file, arr ...

  3. (第二章第四部分)TensorFlow框架之TFRecords数据的存储与读取

    系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html (第二章第二部分)Tens ...

  4. 实现JSON数据的存储和读取

    事前准备: //创建一个Crime类 public class Crime { private String mTitle; private UUID mUUID; private Date mDat ...

  5. php基础系列之 数据的存储和读取

    ·文件处理 ·写入一个文件 1,打开这个文件.如果这个文件不存在,需要先创建它 2,将数据写入这个文件 3,关闭这个文件 ·从一个文件读出数据 1,打开这个文件.如果这个文件不能打开(例如,文件不存在 ...

  6. json数据的存储与读取

    1.  json数据格式: data = [ {"key1":"xxx","item":"ddd"}, {"k ...

  7. 【Cocos2d-X开发学习笔记】第30期:游戏中数据的存储(下)

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.对数据进行编解码 在上一期中,我们使用了CC ...

  8. Android数据存储之SharedPreferences及如何安全存储

    前言: 最近一直在学习ios的数据存储,当学习到NSUserDefaults的时候让我回想起了SharedPreferences,今天闲来无事,想着总结一下SharedPreferences的使用. ...

  9. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

随机推荐

  1. 疯狂的ASP.NET系列-第一篇:啥是ASP.NET后续

    之前总结到了ASP.NET的七大特点,只总结了2大特点,现继续总结后面的5大特点. (3)ASP.NET支持多语言 这里说的多语言就是多种开发语言,如C#,VB.NET,无论你采用哪种开发语言,最终的 ...

  2. 使用MyXls,出现访问被拒绝情况

    MyXls 作为一款比较好用的 操作Excel 的开源项目. 最近日常偶然发现报权限的问题,导出xls失败,处理方式以下: 如报上图所示错误,则需要在web.config中 <system.we ...

  3. linux根目录下文件夹概览

    / 根目录 /bin 存放必要的命令 /boot 存放内核以及启动所需的文件等 /dev 存放设备文件 /etc 存放系统的配置文件 /home 用户文件的主目录,用户数据存放在其主目录中 /lib ...

  4. #敏捷个人资料# 免费下载 《敏捷个人-认识自我,管理自我 v0.8.pdf》

    快乐.高效.平衡,做一个爱学习.有目标.懂生活的影响者. 从今天开始至7月31日,点击http://t.cn/Rv3koHU 免费收到 1000多页的 <敏捷个人-认识自我,管理自我 v0.8. ...

  5. Android 简单计算器源码....

    PS:今天算是闲着没事做了一个小型的计算器...顺便熟悉一下Android的布局,组件,以及时间监听的方法...就当是做了一个小小的练习吧...     顺便去对比了一下别人写的代码...有的使用到了 ...

  6. SQL Server技术问题之自定义函数优缺点

    优点: 可以在SQL语句中调用,直接使用返回值,从而可以形成复杂的SQL应用. 缺点: 能在函数中使用的语句有严格限制: 不支持create.ALTER.drop等DDL(Data Definitio ...

  7. TreeSet与TreeMap浅解

    TreeSet与TreeMap的关系: 1.TreeSet 实际上就是用TreeMap来组织数据的,因为在TreeSet中保存了一个NavigableMap<e,Object>接口实例变量 ...

  8. HDFS Append时packet的格式以及DataNode对block/checksum文件的处理

    HDFS Append时packet的格式以及DataNode对block/checksum文件的处理 HDFS的Block一般比较大,默认64MB/128MB,客户端给DataNode发数据实际上是 ...

  9. Python入门版

    一.前言 陆陆续续学习Python已经近半年时间了,感觉到Python的强大之外,也深刻体会到Python的艺术.哲学.曾经的约定,到现在才兑现,其中不乏有很多懈怠,狼狈. Python入门关于Pyt ...

  10. C#监控USB接口

    该C#代码实现监控USB接口是否有设备接入或拨出,包括多个U盘. using System; using System.IO; using System.Runtime.InteropServices ...