Android常用的工具类SharedPreferences封装类SPUtils
- package com.zhy.utils;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.util.Map;
- import android.content.Context;
- import android.content.SharedPreferences;
- public class SPUtils
- {
- /**
- * 保存在手机里面的文件名
- */
- public static final String FILE_NAME = "share_data";
- /**
- * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
- *
- * @param context
- * @param key
- * @param object
- */
- public static void put(Context context, String key, Object object)
- {
- SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
- Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sp.edit();
- 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());
- }
- SharedPreferencesCompat.apply(editor);
- }
- /**
- * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
- *
- * @param context
- * @param key
- * @param defaultObject
- * @return
- */
- public static Object get(Context context, String key, Object defaultObject)
- {
- SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
- Context.MODE_PRIVATE);
- if (defaultObject instanceof String)
- {
- return sp.getString(key, (String) defaultObject);
- } else if (defaultObject instanceof Integer)
- {
- return sp.getInt(key, (Integer) defaultObject);
- } else if (defaultObject instanceof Boolean)
- {
- return sp.getBoolean(key, (Boolean) defaultObject);
- } else if (defaultObject instanceof Float)
- {
- return sp.getFloat(key, (Float) defaultObject);
- } else if (defaultObject instanceof Long)
- {
- return sp.getLong(key, (Long) defaultObject);
- }
- return null;
- }
- /**
- * 移除某个key值已经对应的值
- * @param context
- * @param key
- */
- public static void remove(Context context, String key)
- {
- SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
- Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sp.edit();
- editor.remove(key);
- SharedPreferencesCompat.apply(editor);
- }
- /**
- * 清除所有数据
- * @param context
- */
- public static void clear(Context context)
- {
- SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
- Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = sp.edit();
- editor.clear();
- SharedPreferencesCompat.apply(editor);
- }
- /**
- * 查询某个key是否已经存在
- * @param context
- * @param key
- * @return
- */
- public static boolean contains(Context context, String key)
- {
- SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
- Context.MODE_PRIVATE);
- return sp.contains(key);
- }
- /**
- * 返回所有的键值对
- *
- * @param context
- * @return
- */
- public static Map<String, ?> getAll(Context context)
- {
- SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
- Context.MODE_PRIVATE);
- return sp.getAll();
- }
- /**
- * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类
- *
- * @author zhy
- *
- */
- private static class SharedPreferencesCompat
- {
- private static final Method sApplyMethod = findApplyMethod();
- /**
- * 反射查找apply的方法
- *
- * @return
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private static Method findApplyMethod()
- {
- try
- {
- Class clz = SharedPreferences.Editor.class;
- return clz.getMethod("apply");
- } catch (NoSuchMethodException e)
- {
- }
- return null;
- }
- /**
- * 如果找到则使用apply执行,否则使用commit
- *
- * @param editor
- */
- public static void apply(SharedPreferences.Editor editor)
- {
- try
- {
- if (sApplyMethod != null)
- {
- sApplyMethod.invoke(editor);
- return;
- }
- } catch (IllegalArgumentException e)
- {
- } catch (IllegalAccessException e)
- {
- } catch (InvocationTargetException e)
- {
- }
- editor.commit();
- }
- }
- }
对SharedPreference的使用做了建议的封装,对外公布出put,get,remove,clear等等方法;
注意一点,里面所有的commit操作使用了SharedPreferencesCompat.apply进行了替代,目的是尽可能的使用apply代替commit
首先说下为什么,因为commit方法是同步的,并且我们很多时候的commit操作都是UI线程中,毕竟是IO操作,尽可能异步;
所以我们使用apply进行替代,apply异步的进行写入;
但是apply相当于commit来说是new API呢,为了更好的兼容,我们做了适配;
SharedPreferencesCompat也可以给大家创建兼容类提供了一定的参考~~
Android常用的工具类SharedPreferences封装类SPUtils的更多相关文章
- Android常用的工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils. Prefe ...
- Android常用的工具类(转)
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefer ...
- 2013最新Android常用的工具类整理
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils. Pref ...
- Android常用正则工具类
此类提供日常开发中常用的正则验证函数,比如:邮箱.手机号.电话号码.身份证号码.日期.数字.小数.URL.IP地址等.使用Pattern对象的matches方法进行整个字符匹配,调用该方法相当于: ...
- Android开发之常用必备工具类图片bitmap转成字符串string与String字符串转换为bitmap图片格式
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...
- (转载)实例详解Android快速开发工具类总结
实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...
- Android 软件管理工具类Utils
Android 软件管理工具类Utils /** * Created by uilubo on 2015/9/30. * 工具类 */ public class Utils { public stat ...
- 一个使用命令行编译Android项目的工具类
一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...
- Java语言Lang包下常用的工具类介绍_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都 ...
随机推荐
- 轴对称 Navier-Stokes 方程组的点态正则性准则 II
在 [Wei, Dongyi. Regularity criterion to the axially symmetric Navier-Stokes equations. J. Math. Anal ...
- 项目实战 redis 缓存
1 首先在你的项目中,引用以下ServiceStack.Redis相关的四个类库.或者通过Nuget进行安装Redis常用组件ServiceStack.Redis. 下载示例代码. 2. 创建一个Re ...
- luogu P5287 [HNOI2019]JOJO
传送门 神™这题暴力能A,这出题人都没造那种我考场就想到的数据,难怪我的垃圾做法有分 先考虑没有撤销操作怎么做,因为每次插入一段一样的字符,所以我们可以把\(x\)个字符\(c\)定义为\(cx\), ...
- 4.Centos7安装JDK8以及环境配置
1.下载 linux 版本 jdk (jdk-8u11-linux-x64.tar.gz) 一定要是 .tar.gz 版本,可以去我的百度网盘下载或者在百度上面找 2.新建文件夹命令:mkdir /u ...
- 51nod 1228、1258 序列求和
这里一次讲两题...貌似都是板子? 所以两题其实可以一起做 [雾 noteskey 总之就是伯努利数的两道入门题啦,就是第二道有点鬼畜了,居然要任意模数的!(好吧是 1e9+7 但也没什么区别了) 伯 ...
- ALU底层方法及计算机整数加减乘除模拟
ALU是计算机CPU的核心,即 算术逻辑单元(arithmetic and logic unit)ALU有几大功能,是计算机计算最基础的功能:1.算术运算:包含加法.减法等2.逻辑运算:主要是布尔运算 ...
- CentOS7.6 yum方式安装mysql2.7.25
在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB 1 下载并安装MySQL官方的 Yum Rep ...
- 使用CompletionService结合ExecutorService批处理调用存储过程任务实例
此实例为java多线程并发调用存储过程实例,只做代码记载,不做详细描述 1.线程池构造初始化类CommonExecutorService.java package com.pupeiyuan.go; ...
- 论文阅读笔记四十三:DeeperLab: Single-Shot Image Parser(CVPR2019)
论文原址:https://arxiv.org/abs/1902.05093 github:https://github.com/lingtengqiu/Deeperlab-pytorch 摘要 本文提 ...
- 关于pyCharm专业版的破解方法
用pycharm编写自动化脚本时,pycharm专业版的使用期限只有30天, 找到了pycharm破解方法. 破解码:{"licenseId":"145446792566 ...