之前写过一篇 SharedPreferences 简单的介绍:
Android数据存储之SharedPreferences(上)
忙过了这段时间后 准备一点点的把从项目中学习到的新知识慢慢的做一个总结。就先从SharedPreferences开始好了。
很多Android APP登陆的时候,会有一个 “记住密码”的选择框,点击勾选之后,下次登陆时就不用再重复输出账号密码,直接点击登陆按钮即可。这个功能就是用Android的SharedPreferences来实现的。我们来试着做做看。
首先写一个SharedPreferences工具类,用来封装一些我们经常会用到的方法,具体代码如下:
public class SharedPreferencesUtils {
private String SP_INFO = "spInfo";
private Context context;
public SharedPreferencesUtils(Context context) {
this.context = context;
}
/**
* 存放字符串类型的登陆信息,以键值对的形式保存.
*
* @param key
* @param value
*/
public void setInfo(String key, String value) {
SharedPreferences sp = context.getSharedPreferences(SP_INFO,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.remove(key);
editor.putString(key, value);
editor.commit();
}
/**
* 获取String类型的数据
*
* @param key 键值对的键
* @return String类型的字符串
*/
public String getStringInfo(String key) {
SharedPreferences sp = context.getSharedPreferences(SP_INFO,
Context.MODE_PRIVATE);
return sp.getString(key, "");
}
/**
* 存放布尔型参数.
* @param key
* @param value
*/
public void setInfo(String key, Boolean value) {
SharedPreferences sp = context.getSharedPreferences(SP_INFO,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.remove(key);
editor.putBoolean(key, value);
editor.commit();
}
/**
* 获得用户信息中某项布尔型参数的值.
* @param key
* @return
*/
public boolean getBooleanInfo(String key) {
SharedPreferences sp = context.getSharedPreferences(SP_INFO,
Context.MODE_PRIVATE);
return sp.getBoolean(key, false);
}
/**
* 获取SharedPreferences数据里全部的key-value对.
* @return Map类型的数据
*/
public Map getAllInfo() {
SharedPreferences sp = context.getSharedPreferences(SP_INFO,
Context.MODE_PRIVATE);
return sp.getAll();
}
/**
* 清空SharedPreferences.
*/
public void clear() {
SharedPreferences sp = context.getSharedPreferences(SP_INFO,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.clear();
editor.commit();
}
}
然后在Activity中调用工具类中的方法,具体代码如下:
loginUtil = new LoginUtil(this);
//获取SharedPreferences中的账号和密码
if (loginUtil.getBooleanInfo(Constants.ISSAVEPASS)){
remPasswordView.setChecked(true);
loginNameView.setText(loginUtil.getStringInfo(Constants.USER_NAME));
passwordView.setText(loginUtil.getStringInfo(Constants.PASSWORD));
}
//设置记住密码,调用登陆工具类,将数据存入SharedPreferences
if (remPasswordView.isChecked()){
loginUtil.setUserInfo(Constants.USER_NAME,loginNameViewValue);
loginUtil.setUserInfo(Constants.PASSWORD,passwordViewValue);
loginUtil.setUserInfo(Constants.ISSAVEPASS,true);
}else if (!remPasswordView.isChecked()){
loginUtil.setUserInfo(Constants.ISSAVEPASS,false);
}
这样,点击记住密码的复选框后,登陆一次,下次再登陆就再也不需要重新输入账号密码这么麻烦了。
如果要清空数据记得调用SharedPreferencesUtils 的clean()方法就好了。
示例图如下:
后记:
SharedPreferences只能用来存储一些简单的信息,例如登陆的账号密码,用户的配置信息等等。但是如果要存放负责的生产数据,使用SharedPreferences就很不方便了。这个时候我们可以尝试使用Sqlite来解决问题。让我喘一会儿气,接着写关于Android数据库存储的相关知识。