package com.demo.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方法的一个兼容类 * */ 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(); } } }
相关推荐
1. **统一管理**:封装后的工具类可以集中处理SharedPreferences的实例化,避免在整个项目中多次创建和销毁,从而提高性能。 2. **简化调用**:通过提供更直观的方法名,如`saveString(key, value)`,`getString(key...
### SharedPreferences封装的必要性 1. **代码复用**:封装可以减少代码重复,避免在多个地方写相同的存取数据的逻辑。 2. **易用性**:封装后的API更简洁,使得其他开发者更容易理解和使用。 3. **健壮性**:通过...
在本篇文章中,我们将深入探讨SharedPreferences工具类的使用,包括其核心概念、API以及如何进行数据的存取操作。 1. **核心概念** - **SharedPreferences**: 这是一个接口,定义了读写键值对的方法。通过...
在Android应用开发中,工具类(Utils)的封装是一个重要的环节,它可以帮助开发者高效地复用代码,提高开发效率。本项目"基于Android系统Api封装常用工具类"就是这样一个资源库,它集成了Android API的各种实用功能...
本文将深入探讨如何使用SharedPreferences,并介绍一个自定义封装的`ShardPreferences`工具类。 ### SharedPreferences基础 SharedPreferences是Android系统提供的一种持久化存储方式,它主要用于存储用户偏好设置...
SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString(key, value); prefs.setBool(key, value) prefs.setDouble(key, value) prefs.setInt(key, value) prefs.setStringList(key, ...
6. **SharedPreferences工具类**:对Android的SharedPreferences进行封装,提供键值对存储和读取的简便方法,方便保存应用的轻量级配置或用户设置。 7. **资源加载工具类**:简化资源的获取,比如颜色、字符串、...
为了简化代码和提高可维护性,我们可以创建一个工具类来封装SharedPreferences的操作。例如,我们可以创建一个名为`PrefsUtils`的静态类: ```java public class PrefsUtils { private static final String PREFS_...
通过封装这些功能到工具类,开发者可以快速地在代码中调用,减少重复代码,提高代码复用性。 总结,"Android快速开发工具类"是Android开发者的重要辅助,它整合了开发过程中常见的实用功能,让开发者能够更加专注于...
在给定的"oksharedprefs-master"项目中,可能包含了一个名为OkSharedPrefs的库,它就是利用注解和注解处理器实现的SharedPreferences封装。以下是一些关键知识点: 1. **注解处理器**:在Android Studio中,我们...
- SharedPreferences工具类:简化SharedPreferences的读写操作。 - Android权限管理工具类:处理Android运行时权限的请求和检查。 - 网络状态检测工具类:检测设备是否连接到网络,以及网络类型(WiFi、移动网络...
在Android应用开发中,工具类(Utils Class)是开发者经常使用的辅助代码集合,它们封装了常见的功能,使得在处理特定任务时能更加高效和简洁。本资料“Java-Android工具类”显然是一份包含了多种实用工具类的集合,...
本篇文章将详细探讨Android开发中的几个常用工具类,包括LOG、Toast、SharedPreferences以及其他的实用工具类。 1. **LOG工具类**: 在Android开发中,日志(LOG)主要用于调试和追踪应用运行时的状态。自定义的...
- Android开发中常见的工具类包括:字符串工具类(处理字符串格式化、拼接等)、日期时间工具类(格式化日期和时间)、网络工具类(检查网络状态、发起网络请求)、图片处理工具类(裁剪、压缩、加载图片)等。...
6. **数据存储工具类**:Android提供了SharedPreferences、SQLite数据库等多种存储方式,工具类可以提供统一的接口,如`savePreferences()`, `readPreferences()`, `insertToDB()`, `queryFromDB()`等。 7. **Log...