对于大部分初学者来说,如果想利用SharedPreferences进行数据存储的话大部分人(包括本人)应该会这样:

存储:

    SharedPreferences sharedPreferences = getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
Editor editor = sharedPreferences.edit();
editor.putString("username", "Tom");
editor.putInt("password", 123456);
editor.commit();

获取:

    SharedPreferences sharedPreferences = getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
String username = sharedPreferences.getString("username", "");
int password = sharedPreferences.getInt("password", 0);

虽然这样做代码没多少,如果是对于初学者练习来说无伤大雅。但是如果你是做一个项目开发来说,里面使用了大量的数据存数。每次都将上面的代码一遍一遍的重复,估计能让人崩溃。所以,对于实际项目开发来说,最好能将可以封装的工具类封装就进行封装。

下面是一个封装好的SharedPreferences的工具类,如果你有需要直接引用就OK:

package com.example.utl;

import java.util.Map;

import android.content.Context;
import android.content.SharedPreferences; /**
* 保存信息配置类
*
* @author admin
*/
public class SharedPreferencesHelper {
private SharedPreferences sharedPreferences;
/*
* 保存手机里面的名字
*/private SharedPreferences.Editor editor; public SharedPreferencesHelper(Context context,String FILE_NAME) {
sharedPreferences = context.getSharedPreferences(FILE_NAME,
Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
} /**
* 存储
*/
public void put(String key, Object object) {
if (object instanceof String) {
editor.putString(key, (String) object);
} else if (object instanceof Integer) {
editor.putInt(key, (Integer) object);
} else if (object instanceof Boolean) {
editor.putBoolean(key, (Boolean) object);
} else if (object instanceof Float) {
editor.putFloat(key, (Float) object);
} else if (object instanceof Long) {
editor.putLong(key, (Long) object);
} else {
editor.putString(key, object.toString());
}
editor.commit();
} /**
* 获取保存的数据
*/
public Object getSharedPreference(String key, Object defaultObject) {
if (defaultObject instanceof String) {
return sharedPreferences.getString(key, (String) defaultObject);
} else if (defaultObject instanceof Integer) {
return sharedPreferences.getInt(key, (Integer) defaultObject);
} else if (defaultObject instanceof Boolean) {
return sharedPreferences.getBoolean(key, (Boolean) defaultObject);
} else if (defaultObject instanceof Float) {
return sharedPreferences.getFloat(key, (Float) defaultObject);
} else if (defaultObject instanceof Long) {
return sharedPreferences.getLong(key, (Long) defaultObject);
} else {
return sharedPreferences.getString(key, null);
}
} /**
* 移除某个key值已经对应的值
*/
public void remove(String key) {
editor.remove(key);
editor.commit();
} /**
* 清除所有数据
*/
public void clear() {
editor.clear();
editor.commit();
} /**
* 查询某个key是否存在
*/
public Boolean contain(String key) {
return sharedPreferences.contains(key);
} /**
* 返回所有的键值对
*/
public Map<String, ?> getAll() {
return sharedPreferences.getAll();
}
}

登录界面:

Activity中应用:

/**
* 登录界面
*
* @author admin
*
*/
public class LoginActivity extends Activity implements OnClickListener {
private EditText username;
private EditText password;
private Button login;// 登录按钮
private CheckBox holdPwd;// 保存用户和密码
private MyDialog mydialog;// 自定义对话框
private SharedPreferencesHelper sharedPreferencesHelper; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_login); init();
} /**
* 初始化界面
*/
private void init() {
sharedPreferencesHelper = new SharedPreferencesHelper(
LoginActivity.this, "anhua");
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
holdPwd = (CheckBox) findViewById(R.id.login_hold);
holdPwd.setChecked(true);
     //取出存储的值在登陆界面中显示
username.setText(sharedPreferencesHelper.getSharedPreference("username", "").toString().trim());
password.setText(sharedPreferencesHelper.getSharedPreference("password", "").toString().trim());
login = (Button) findViewById(R.id.login);
login.setOnClickListener(this); } @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.login:
login();
break;
default:
break;
}
} private void login() {
String name = username.getText().toString().trim();
String pwd = password.getText().toString().trim();
     //如果复选框被选中则存储账户和密码
if (holdPwd.isChecked()) {
sharedPreferencesHelper.put("username", name);
sharedPreferencesHelper.put("password", pwd);
sharedPreferencesHelper.put("isremember", holdPwd.isChecked());
} else {
       //如果复选框未被选中则清除记录的账号和密码
sharedPreferencesHelper.remove("username");
sharedPreferencesHelper.remove("password");
sharedPreferencesHelper.remove("isremember");
}
login.setBackgroundResource(R.drawable.bg_login_submit);
login.setTextColor(getResources().getColor(R.color.white));
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}

Android开发之SharedPreferences的封装的更多相关文章

  1. Android开发之sharedpreferences 详解

    SharedPreferences简介:   做软件开发应该都知道,很多软件会有配置文件,里面存放这程序运行当中的各个属性值,由于其配置信息并不多,如果采用数据库来存放并不划算,因为数据库连接跟操作等 ...

  2. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  3. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  4. Android开发之InstanceState详解(转)---利用其保存Activity状态

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  5. Android开发之eclipse 快捷键

    转自:<Android开发之eclipse 快捷键>http://www.cnblogs.com/aimeng/archive/2012/08/07/2626909.html Ctrl+1 ...

  6. Android开发之旅4:应用程序基础及组件

    引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...

  7. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

  8. Android开发之Git配置

    Android开发之Git配置 1.首先git配置: 输入命令: git config --global user.name "xxx.xx" git config --globa ...

  9. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

随机推荐

  1. ANg-线性回归算法

    线性回归算法 linear regression 对于线性回归模型,我们期望对于样本数据集,通过假设函数,得出目标值 代价函数 m在这里指的是训练样本的数量 所以我们的目的就是得出代价函数(平方误差代 ...

  2. 设置DNS 代理

    最近烦心事好多啊,坑爹的中介... 公司之前因为断电,导致DNS基础服务故障,很多系统好半天在能使用,所以这次吸取教训,设置备份的DNS server以及使得DNS能够动态迁移,在这种时候就显得格外的 ...

  3. 聚类分析K均值算法讲解

    聚类分析及K均值算法讲解 吴裕雄 当今信息大爆炸时代,公司企业.教育科学.医疗卫生.社会民生等领域每天都在产生大量的结构多样的数据.产生数据的方式更是多种多样,如各类的:摄像头.传感器.报表.海量网络 ...

  4. ROC,AUC,Precision,Recall,F1的介绍与计算(转)

    1. 基本概念 1.1 ROC与AUC ROC曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,ROC曲线称为受试者工作特征曲线 (receiver operatin ...

  5. js基础-语句

    if语句 if(true){ console.log(true) } if(0 == false){ console.log(true) } var a,b; Math.random() 随机生成 0 ...

  6. 使用yii\filters下的比如\PageCache需要在web.php里面的组件上配置'cache' => [ 'class' => 'yii\caching\FileCache', ],

    public function behaviors(){ /*需要在config文件下的web.php里面加上 'cache' => [ 'class' => 'yii\caching\F ...

  7. 输入框状态禁止enter键提交表单

    1:页面中如果存在input输入框和submit提交按钮时,默认按enter键会提交表单,如果我现在在做查询操作,一不小心按了enter键就会有提交表单的操作,这样显然是不合理的,所以我们要禁止按en ...

  8. Spring read-only="true" 只读事务的

    概念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据) 应用场合: 如果你一次执行单条查询语句,则没有必 ...

  9. Flex Basis与Width的区别

    [Flex Basis与Width的区别] Flex Items的应用准则 content –> width –> flex-basis (limted by max|min-width) ...

  10. veil-catapult

    veil-catapult进行payload投放,直接使payload在内存中执行. kaliIP:192.168.1.119 目标IP:192.168.1.121 1.powershell powe ...