android菜鸟学习笔记18----Android数据存储(二)SharedPreferences
数据存储的方式,有比直接文件读写更加简便的方式,那就是操作SharedPreferences。
SharedPreferences一般用于存储用户的偏好设定,暂时不支持多进程操作。
SharedPreferences是一个接口,可以通过Context和Activity中提供的方法获得SharedPreferences的实例。SharedPreferences的数据存放在/data/data/应用包名/shared_pref/目录下。
获取方法:
1.Context.getSharedPreferences(String name, int mode);name用于指定数据存储的文件名,mode同文件读写中的模式。
2.Activity.getPreferences(int mode):返回一个私有的仅能被当前Activity访问的SharedPreferences实例,自动将类名作为文件名。
3.PreferenceManager. getDefaultSharedPreferences(Context context):传入context参数,返回该context上下文所对应的包名作为前缀来命名的文件。
SharedPreferences的使用:
写数据:
通过SharedPreferences.Editor这个内部类的对象来向SharedPreferences对象添加或修改数据。SharedPreferences的edit()方法可以获取这个Editor对象。Editor的putXXX()方法可以添加或修改数据。
添加或修改的数据,还需要通过Editor的commit()方法提交之后才会真正保存到文件中。
读数据:
要读取SharedPreferences中的数据,直接调用它的getXXX()方法即可。
例如,修改上一个示例中的FileUtils,添加writeSp()和readSp()方法:
public static boolean writeSp(Context context, String data){
try {
SharedPreferences preferences = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE);
Editor editor = preferences.edit();
if(!data.contains("#")){
return false;
}
String[] strings = data.split("#");
editor.putString("username", strings[0]);
editor.putString("password", strings[1]);
editor.commit();
return true;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
public static String readSp(Context context){
try {
SharedPreferences preferences = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE);
String username = preferences.getString("username", "");
String password = preferences.getString("password", "");
return username+"#"+password;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
修改MainActivity的onCreate(),对应读写文件改成调用读写SharedPreferences方法即可。
运行结果:

导出这个xml文件:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <string name="password">abcdef</string> <string name="username">dqrcsc</string> </map>
修改writeSp()和readSp()方法,改为通过Activity的getPreferences()获取SharedPreferences对象:
SharedPreferences preferences = ((Activity)context).getPreferences(Context.MODE_PRIVATE);
运行结果:

可知,通过Activity获取SharedPreferences对象,默认以当前Activity的全限定名作为文件名。
修改writeSp()和readSp()方法,改为通过PreferenceManager的getDefaultSharedPreferences(Context context)获取SharedPreferences对象:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
运行结果:

可知,这种方式下数据的存放文件以传入的Context对应的包名作为前缀,然后连上_preferences.xml作为文件名。
android菜鸟学习笔记18----Android数据存储(二)SharedPreferences的更多相关文章
- springmvc学习笔记(18)-json数据交互
springmvc学习笔记(18)-json数据交互 标签: springmvc springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 加入json转换的依赖 ...
- android菜鸟学习笔记17----Android数据存储(一)文件读写
假如有如下需求,要求能够记录用户输入的用户名和密码,下次登录时,能直接获取之前保存的用户名密码,并在相应的EditText中显示. 要保存用户输入的数据,最先想到的应该就是文件读写了. 通过对andr ...
- android菜鸟学习笔记24----与服务器端交互(一)使用HttpURLConnection和HttpClient请求服务端数据
主要是基于HTTP协议与服务端进行交互. 涉及到的类和接口有:URL.HttpURLConnection.HttpClient等 URL: 使用一个String类型的url构造一个URL对象,如: U ...
- android菜鸟学习笔记25----与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件请求服务端数据
补充:关于PHP服务端可能出现的问题: 如果你刚好也像我一样,用php实现的服务端程序,采用的是apache服务器,那么虚拟主机的配置可能会影响到android应用的调试!! 在android应用中访 ...
- android菜鸟学习笔记23----ContentProvider(三)利用内置ContentProvider监听短信及查看联系人
要使用一个ContentProvider,必须要知道的是它所能匹配的Uri及其数据存储的表的结构. 首先想办法找到访问短信及联系人数据的ContentProvider能接受的Uri: 到github上 ...
- android菜鸟学习笔记21----ContentProvider(一)ContentProvider的简单使用
ContentProvider是Android四大组件之一,它用来封装数据,并通过ContentResolver接口将数据提供给其他应用.只有当需要在多个应用之间共享数据时才会用到ContentPro ...
- android菜鸟学习笔记14----Android控件(三) ListView的简单使用
MVC模式: MVC的基本原理就是通过Controller连接View和Model.当View中所显示的数据发生变化时,会通知Controller,然后由Controller调用Model中的相关方法 ...
- android菜鸟学习笔记10----Intent及<intent-filter>
关于Bundle: 注意到Activity的onCreate()方法的签名是protected void onCreate(Bundle savedInstanceState),其参数是一个Bundl ...
- android菜鸟学习笔记31----Android使用百度地图API(二)获取地理位置及地图控制器的简单使用
1.获取当前地理位置: Android中提供了一个LocationManager的类,用于管理地理位置.不能通过构造函数获取该类的实例,而是通过Context的getSystemService(): ...
随机推荐
- django使用类做业务逻辑
在django中一般定义一个带有request参数的函数用来处理url,但是更推荐用类做 从django.views.generic.base 导入的views有get,post等各种函数,用来处理对 ...
- 【Hadoop】Hadoop mr wordcount基础
1.基本概念 2.Mapper package com.ares.hadoop.mr.wordcount; import java.io.IOException; import java.util.S ...
- 【共享单车】—— React后台管理系统开发手记:权限设置和菜单调整(未完)
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- 2017.7.18 linux下ELK环境搭建
参考来自:Linux日志分析ELK环境搭建 另一篇博文:2017.7.18 windows下ELK环境搭建 0 版本说明 因为ELK从5.0开始只支持jdk 1.8,但是项目中使用的是JDK 1 ...
- MySQL的查询,子查询,联结查询,联合查询
MySQL的查询,子查询,联结查询,联合查询 一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二 ...
- 使用SQLite存储数据
一.SQLiteAndroid 为了让我们能够更加方便地管理数据库, 专门提供了一个SQLiteOpenHelper 帮助类,借助这个类就可以非常简单地对数据库进行创建和升级. 1.SQLiteOpe ...
- 自定义 alert 弹窗
1.css样式 li-alert.css @-webkit-keyframes opacity { 0% { opacity: 0; /*初始状态 透明度为0*/ } 50% { opacity: 0 ...
- python例子三
例一:匹配长度为1-15的域名 #-*-encoding:utf--*- import re regex=re.compile('^www[.][a-z]{1,15}[.](com|org)') m1 ...
- mybatis 遇到的问题
顺序问题:在resultmap中,result必须在association之前.否则会报错 只查出一条记录的问题 :重名的id,要起别名.而且不能忽略. mybaits错误解决:There is n ...
- (三)Thymeleaf标准表达式之——文字(literals)
2.2 文字(literals) 模板名称:text.html 2.2.1 文本(text literals)(放在 单引号 里面,可以是任意字符) <p> Now you are loo ...