`

SharedPreferences封装工具类

阅读更多
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();
		}
	}

}

 

分享到:
评论

相关推荐

    Android-Android系统SharedPreferences进行的封装

    1. **统一管理**:封装后的工具类可以集中处理SharedPreferences的实例化,避免在整个项目中多次创建和销毁,从而提高性能。 2. **简化调用**:通过提供更直观的方法名,如`saveString(key, value)`,`getString(key...

    SharedPreferences封装

    ### SharedPreferences封装的必要性 1. **代码复用**:封装可以减少代码重复,避免在多个地方写相同的存取数据的逻辑。 2. **易用性**:封装后的API更简洁,使得其他开发者更容易理解和使用。 3. **健壮性**:通过...

    SharedPreferences工具类

    在本篇文章中,我们将深入探讨SharedPreferences工具类的使用,包括其核心概念、API以及如何进行数据的存取操作。 1. **核心概念** - **SharedPreferences**: 这是一个接口,定义了读写键值对的方法。通过...

    基于Android系统Api封装常用工具类

    在Android应用开发中,工具类(Utils)的封装是一个重要的环节,它可以帮助开发者高效地复用代码,提高开发效率。本项目"基于Android系统Api封装常用工具类"就是这样一个资源库,它集成了Android API的各种实用功能...

    自己封装的ShardPreferences 工具类

    本文将深入探讨如何使用SharedPreferences,并介绍一个自定义封装的`ShardPreferences`工具类。 ### SharedPreferences基础 SharedPreferences是Android系统提供的一种持久化存储方式,它主要用于存储用户偏好设置...

    Flutter进阶第10篇: 本地存储,封装本地存储类,实现最简单的状态管理

    SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString(key, value); prefs.setBool(key, value) prefs.setDouble(key, value) prefs.setInt(key, value) prefs.setStringList(key, ...

    基于Android系统Api封装常用工具类.zip

    6. **SharedPreferences工具类**:对Android的SharedPreferences进行封装,提供键值对存储和读取的简便方法,方便保存应用的轻量级配置或用户设置。 7. **资源加载工具类**:简化资源的获取,比如颜色、字符串、...

    Android-简单的AndroidSharedPreferences封装

    为了简化代码和提高可维护性,我们可以创建一个工具类来封装SharedPreferences的操作。例如,我们可以创建一个名为`PrefsUtils`的静态类: ```java public class PrefsUtils { private static final String PREFS_...

    Android快速开发工具类

    通过封装这些功能到工具类,开发者可以快速地在代码中调用,减少重复代码,提高代码复用性。 总结,"Android快速开发工具类"是Android开发者的重要辅助,它整合了开发过程中常见的实用功能,让开发者能够更加专注于...

    Android-通过注解生成SharedPreferences包装类解决跨进程数据访问不同步的问题

    在给定的"oksharedprefs-master"项目中,可能包含了一个名为OkSharedPrefs的库,它就是利用注解和注解处理器实现的SharedPreferences封装。以下是一些关键知识点: 1. **注解处理器**:在Android Studio中,我们...

    java开发工具类(14个)

    - SharedPreferences工具类:简化SharedPreferences的读写操作。 - Android权限管理工具类:处理Android运行时权限的请求和检查。 - 网络状态检测工具类:检测设备是否连接到网络,以及网络类型(WiFi、移动网络...

    Java-Android工具类

    在Android应用开发中,工具类(Utils Class)是开发者经常使用的辅助代码集合,它们封装了常见的功能,使得在处理特定任务时能更加高效和简洁。本资料“Java-Android工具类”显然是一份包含了多种实用工具类的集合,...

    Android常用工具类

    本篇文章将详细探讨Android开发中的几个常用工具类,包括LOG、Toast、SharedPreferences以及其他的实用工具类。 1. **LOG工具类**: 在Android开发中,日志(LOG)主要用于调试和追踪应用运行时的状态。自定义的...

    安卓公共工具类安卓公共工具类

    10. **偏好设置工具类**:简化SharedPreferences的使用,提供更友好的接口来保存和读取用户配置。 11. **线程管理工具类**:如Handler、Runnable、AsyncTask的封装,处理多线程任务,避免主线程阻塞。 12. **字符...

    Android-简单的Android工具类包含ActivityFragmentApplication基类和各类常用工具类集合

    - Android开发中常见的工具类包括:字符串工具类(处理字符串格式化、拼接等)、日期时间工具类(格式化日期和时间)、网络工具类(检查网络状态、发起网络请求)、图片处理工具类(裁剪、压缩、加载图片)等。...

Global site tag (gtag.js) - Google Analytics