当前位置: 首页 > 编程日记 > 正文

Android开发之SharedPreferences的封装

对于大部分初学者来说,如果想利用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

相关文章:

LeetCode实战:设计循环双端队列

题目英文 Design your implementation of the circular double-ended queue (deque). Your implementation should support following operations: MyCircularDeque(k): Constructor, set the size of the deque to be k.insertFront(): Adds an item at the front of Deque…

ItemsControl 解析

先上个示例 <ItemsControl Margin"10" ItemsSource"{Binding}" Name"itemsControl"> <ItemsControl.Template><ControlTemplate TargetType"{x:Type ItemsControl}"><Border CornerRadius"5">&l…

【Web前端培训基础知识】ES5及ES6this详解

今天&#xff0c;我们学习一下JavaScript中的this。我们从什么是this,ES5及ES6中this的几种情况进行学习。让this变的so easy&#xff0c;我们这里说的都是非严格模式下。 什么是this this表示当前行为执行的主体&#xff0c;在javaScript中this不是函数独有的&#xff0c;但是…

LeetCode实战:滑动窗口最大值

题目英文 Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position. Return the max sli…

Partial Class部分类

Partial Class &#xff0c;部分类 或者分布类。顾名思义&#xff0c;就是将一个类分成多个部分。比如说&#xff1a;一个类中有3个方法&#xff0c;在VS 2005将该类中3个方法分别存放在3个不同的.cs文件中。这样做的好处&#xff1a;1、一个大型的项目类可以同时分成不同的区块…

表格中td限宽溢出以省略号代替

table.ms-listviewtable {table-layout:fixed;width: 100%; } table.ms-listviewtable td[role"gridcell"]{white-space:nowrap;text-overflow:ellipsis;-moz-text-overflow: ellipsis;overflow:hidden; } 转载于:https://www.cnblogs.com/JaneBlog/p/7490445.html

【UI设计培训基础知识】设计中的点线面-线

UI设计所要学习的知识有很多&#xff0c;想要在后期的工作中稳稳当当&#xff0c;基础知识一定要扎实&#xff0c;下面就是小编为大家整理的一份关于UI设计培训基础知识的相关内容&#xff0c;主要讲的是设计中的点线面-线&#xff0c;来看看下面的详细资料吧。 点的移动形成一…

场面话大全,绝对受用一生

◆ 父母生日祝酒辞 尊敬的各位领导、各们长辈、各们亲朋好友&#xff1a;大家好&#xff01; 在这喜庆的日子里&#xff0c;我们高兴地迎来了敬爱的父亲&#xff08;母亲&#xff09;XX岁的生日。今天&#xff0c;我们欢聚一堂&#xff0c;举行父亲&#xff08;母亲&#xff09…

LeetCode实战:爬楼梯

题目英文 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? Note: Given n will be a positive integer. Example 1: Input: 2 Output: 2 Exp…

Visual Studio Remote Debugger(for 2005/2008) .net远程调试转

我采用虚机的方式模拟了局域网环境&#xff0c;以下是我操作的步骤&#xff08;client代表客户端&#xff0c;server代表调试机&#xff09;&#xff1a; 建立ASP.NET项目(client)&#xff1a;简单写了点Code 代码 1 protectedvoidPage_Load(objectsender, EventArgs e)2 {3 in…

UI设计师必备技能,看看你都学会了吗?

想要成为一名合格的UI设计师&#xff0c;是要有这几项必备技能的&#xff0c;学会这些必备技能&#xff0c;那么后期的工作会进行的相当顺利&#xff0c;下面小编就为大家详细的介绍一下UI设计师必备技能都有哪些? UI设计师必备技能&#xff0c;看看你都学会了吗? 1、设计软件…

CSS中关于清除浮动的问题

1.采用:after的方法清除浮动 优点&#xff1a;避免在html里插入多余的标签 详情&#xff1a;http://www.positioniseverything.net/easyclearing.html 整理成一个通用的.clearfix .clearfix:after {content:".";display:block;height:0;clear:both;visibility:hidden…

LeetCode实战:x 的平方根

题目英文 Implement int sqrt(int x). Compute and return the square root of x, where x is guaranteed to be a non-negative integer. Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned. …

Vue中组件数据的传递

Vue中组件的作用域是隔离的&#xff0c;父组件中的数值子组件看不到&#xff01;也就是说&#xff0c;用angular作比喻&#xff0c;组件的scope天生是scope:()的&#xff01;如果父组件需要往子组件中传数据&#xff0c;此时应该使用标签属性&#xff1a; <div id"app&…

学习Python往哪个方向发展好

Python近几年在IT行业的发展前景是非常可观的&#xff0c;尤其是在人工智能领域这一块&#xff0c;吸引了很多人的关注&#xff0c;但不仅仅是人工智能领域&#xff0c;Python在很多其他地方也是非常有发展前景的&#xff0c;那么具体学习Python往那个方向发展好呢?来看看下面…

开发人员绩效考核中有效bug数的统计

我们都知道,开发人员的考核中,bug这块占了一定的比重,那么我们在统计每个开发人员的bug数时,显然要做到有效,不能把缺陷管理系统上的bug不经过处理,就直接进行统计. 如何统计有效bug数呢? 我们从bug的属性上进行控制,分析如下: bug问题来源: 需求问题架构问题设计问题编码问题…

LeetCode实战:反转字符串

题目英文 Write a function that reverses a string. The input string is given as an array of characters char[]. Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory. You may assume al…

HTML5 监听当前位置

2019独角兽企业重金招聘Python工程师标准>>> <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>监听当前位置</title><meta name"viewport" content"widthdevice-width, initial-scale1,…

Python培训教程之Python基础知识点梳理

Python语言是入门IT行业比较快速且简单的一门编程语言&#xff0c;学习Python语言不仅有着非常大的发展空间&#xff0c;还可以有一个非常好的工作&#xff0c;下面小编就来给大家分享一篇Python培训教程之Python基础知识点梳理。 Python培训教程之Python基础知识点梳理&#x…

技术图文:如何通过挂单刷 BigOne 的贡献值?

背景 这段时间 BigOne 开启了「挂单捡钱七天乐」活动&#xff0c;凡在活动期间进行有效挂单的用户均可获得「贡献值」奖励。 详细情况如下&#xff1a; 1. 参与交易对 BTC/USDT, EOS/USDT, ETH/USDT, ONE/USDT, EOS/BTC, ETH/BTC, EOS/ETH&#xff0c;共 7 个交易对。 2. …

ASP.NET - Page 的生命周期

初始化(Initialization) 页面被请求时&#xff0c;第一个被执行的总是构造函数(constructor). 你可以在这里初始化很多自定义属性或对象。不过这里有一些限制&#xff0c;因为 page 还没有被完全初始化。特别地&#xff0c;你必须使用 HttpContext.Current 来访问 QueryString,…

【视频点播最佳实践】视频点播播放异常排查

阿里云视频点播是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速、视频播放于一体的一站式音视频点播解决方案。但是对于使用者来说经常遇到的问题即是视频点播中的视频如何对外提供服务&#xff0c;并且当播放出现异常时如何进行排查呢&#xff1f;本文主…

Java程序员技术培训需要培训哪些?

随着java技术行业的不断发展&#xff0c;越来越多的人想要学习java技术&#xff0c;那么想要成为一名优秀的java工程师&#xff0c;需要学习的技术知识是非常多的&#xff0c;下面小编就为大家详细的介绍一下Java程序员技术培训需要培训哪些? Java程序员技术培训需要培训哪些?…

VS2008 VS2010发布网站时如何产生固定命名的 Dll 文件

VS2008 发布网站时如何产生固定命名的 Dll 文件dev.firnow.com 时间 &#xff1a; 2010-12-08 作者&#xff1a;网络 编辑&#xff1a;fnw 点击&#xff1a; 82 [ 评论 ]--VS2008 在发布网站时&#xff0c;bin 目录里为所有 cs 生成的 dll 文件每次都是随机命名的&#…

LeetCode实战:两数相加

题目英文 You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume the two nu…

计算机中的概念: 视图 VS 镜像

这两个概念还是不太一样的。下面来说说个人的理解&#xff0c;记录一下。 1. 镜像 镜像可以理解为一份完全一样的拷贝。也就是"深度拷贝"&#xff0c;一个复制品。 比如 iso映像文件&#xff0c;ubuntu-12.04.5-desktop-amd64.iso 比如 数据的多副本&#xff0c;用于…

Python入门学习方法有哪些?

Python编程语言是相对比较简单的一门编程语言&#xff0c;在IT行业&#xff0c;很多零基础学员都会优先选择Python语言进行学习&#xff0c;希望可以进入到IT这个大家庭&#xff0c;那么想要学好Python编程&#xff0c;针对Python入门学习方法有哪些呢?来看看下面的详细介绍。…

LeetCode实战:寻找两个有序数组的中位数

题目英文 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (mn)). You may assume nums1 and nums2 cannot be both empty. Example 1: nums1 …

从Preact了解一个类React的框架是怎么实现的(一): 元素创建

首先欢迎大家关注我的掘金账号和Github博客&#xff0c;也算是对我的一点鼓励&#xff0c;毕竟写东西没法获得变现&#xff0c;能坚持下去也是靠的是自己的热情和大家的鼓励。  之前分享过几篇关于React的文章: React技术内幕: key带来了什么React技术内幕: setState的秘密其…

呵呵,哈哈,嘿嘿,从今天起就开始写博客文了

第一篇嘛&#xff0c;完完全全的水篇&#xff0c;因为确实不知道该写些什么好啦&#xff0c;恩&#xff0c;哈&#xff0c;以后就多写一些的了&#xff0c;嘘&#xff0c;玩别的去了&#xff01;拜拜&#xff01;转载于:https://www.cnblogs.com/thinkgao/archive/2011/04/26/2…