对于大部分初学者来说,如果想利用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;@Overrideprotected 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);}
@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (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();}
}

转载于:https://www.cnblogs.com/1925yiyi/p/7489367.html

Android开发之SharedPreferences的封装相关推荐

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

    --成功属于耐得住寂寞的人,接下来几篇将讲述Android应用程序的原理及术语,可能会比较枯燥.如果能够静下心来看,相信成功将属于你. 引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android ...

  2. Android开发之MVVM模式实践(六),2021字节跳动春招技术面试题

    以上是我们创建协程的实现方式,我们可以通过指定Dispatchers来决定协程到底在什么线程中工作,而其实Kotlin的协程核心库中也为我们提供封装好了的scope,例如MainScope,源码如下: ...

  3. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序   在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...

  4. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

  5. android之json解析优化,Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

  6. android注册弹窗,Android开发之PopupWindow创建弹窗、对话框的方法详解

    本文实例讲述了Android开发之PopupWindow创建弹窗.对话框的方法.分享给大家供大家参考,具体如下: 简介: PopupWindow 可创建类似对话框风格的窗口 效果: 使用方法: 使用P ...

  7. Android开发之旅:组件生命周期(二)

    引言 应用程序组件有一个生命周期--一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  8. Android开发之SpannableString具体解释

    在实际的应用开发过程中常常会遇到.在文本的不同部分显示一些不同的字体风格的信息如:文本的字体.大小.颜色.样式.以及超级链接等. 普通情况下,TextView中的文本都是一个样式.对于类似的情况.能够 ...

  9. Android开发之2048安卓版

    之前是在eclipse上写的,后面换成了android sudio. 2048游戏的UI整体可以采用线性布局,即LinearLayout,其中嵌套一个线性布局和一个GridLayout,内嵌的线性布局 ...

最新文章

  1. 支持实践教学:清华大数据能力提升项目举办CIKM AnalytiCup2017冠军团队经验分享会
  2. 无法将stdClass类型的对象用作数组?
  3. python无限次输入_在Raspberry Pi上的Python用户输入无限循环内部输入时很多输入错过了输入...
  4. freemark静态页面中文乱码
  5. 从NBear到ADO.NET Entity Framework让我迷惑了
  6. python中的星号和乘号_Python 函数中参数前面一个和两个星号(**)的区别
  7. eclipse 插件打包发布
  8. Linux加密框架中的算法和算法模式
  9. oracle java存储过程返回值_java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)...
  10. WORD如何制作参考文献?
  11. html页面调用高德地图,html前端使用高德地图入门教程,并在地图上标记位置-Go语言中文社区...
  12. rsync增量同步标志位详细解释
  13. task 13-change the lcd to 32bpp form 16bpp.
  14. 概率论——负二项随机变量
  15. C#利用vbs控制3D Stereoscopic Player播放器
  16. 超像素采样网络(英伟达)
  17. php 模拟登陆微信,PHP实现微信模拟登陆的实例介绍
  18. 003.原生数据类型使用陷阱 Pitfall of Primitive Data Type
  19. C++中cout<<后面加endl什么意思?
  20. history 路由 vs hash 路由 vs location.href 实现跳转

热门文章

  1. 操作SQLite数据库
  2. 在baidu上找到自己
  3. 利用c语言结构体和union实现类似c++的public,private的实现
  4. 从内存溢出看Java 环境中的内存结构
  5. 高性能Mysql主从架构的复制原理及配置详解
  6. linux下history(历史)命令用法详解
  7. Linux下文件如果没有权限不能被Apache访问
  8. 四层和七层负载均衡的区别
  9. C#编写的生成缩略图程序
  10. 递归的妙用—遍历子控件