博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 常用工具类之SPUtil,可以修改默认sp文件的路径
阅读量:6653 次
发布时间:2019-06-25

本文共 6197 字,大约阅读时间需要 20 分钟。

参考:

1.     

2.         

import android.app.Activity;import android.content.Context;import android.content.ContextWrapper;import android.content.SharedPreferences;import com.imageviewpager.language.MyApplication;import java.io.File;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Map;public class SPUtil {    /** debug 环境下允许修改 sp文件的路径 */    public static final boolean isDebug = true;    /** 修改以后的sp文件的路径 MyApplication.getContext().getExternalFilesDir(null).getAbsolutePath()=/sdcard/Android/%package_name%/file */    public static final String FILE_PATH = MyApplication.getContext().getExternalFilesDir(null).getAbsolutePath();    /**     * 保存数据     *     * @param context     * @param fileName 文件名, 不需要".xml"     * @param keyName     * @param value     */    public static void put(Context context, String fileName, String keyName, Object value) {        SharedPreferences.Editor editor = getSharedPreferences(context, fileName).edit();        if (value instanceof String) {            editor.putString(keyName, (String) value);        } else if (value instanceof Integer) {            editor.putInt(keyName, (Integer) value);        } else if (value instanceof Boolean) {            editor.putBoolean(keyName, (Boolean) value);        } else if (value instanceof Float) {            editor.putFloat(keyName, (Float) value);        } else if (value instanceof Long) {            editor.putLong(keyName, (Long) value);        } else {            editor.putString(keyName, value.toString());        }        SharedPreferencesCompat.apply(editor);    }    /**     * 获取数据     *     * @param context     * @param fileName     * @param keyName     * @param defaultValue 默认值     * @return     */    public static Object get(Context context, String fileName, String keyName, Object defaultValue) {        SharedPreferences sp = getSharedPreferences(context, fileName);        if (defaultValue instanceof String) {            return sp.getString(keyName, (String) defaultValue);        } else if (defaultValue instanceof Integer) {            return sp.getInt(keyName, (Integer) defaultValue);        } else if (defaultValue instanceof Boolean) {            return sp.getBoolean(keyName, (Boolean) defaultValue);        } else if (defaultValue instanceof Float) {            return sp.getFloat(keyName, (Float) defaultValue);        } else if (defaultValue instanceof Long) {            return sp.getLong(keyName, (Long) defaultValue);        }        return null;    }    /**     * 移除某个key值对应的值     *     * @param context     * @param fileName     * @param keyName     */    public static void remove(Context context, String fileName, String keyName) {        SharedPreferences.Editor editor = getSharedPreferences(context, fileName).edit();        editor.remove(keyName);        SharedPreferencesCompat.apply(editor);    }    /** 清除所有数据 */    public static void clear(Context context, String fileName) {        SharedPreferences.Editor editor = getSharedPreferences(context, fileName).edit();        editor.clear();        SharedPreferencesCompat.apply(editor);    }    /**     * 查询某个key是否已经存在     *     * @param context     * @param keyName     * @return     */    public static boolean contains(Context context, String fileName, String keyName) {        return getSharedPreferences(context, fileName).contains(keyName);    }    /** 返回所有的键值对 */    public static Map
getAll(Context context, String fileName) { return getSharedPreferences(context, fileName).getAll(); } /** 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类 */ private static class SharedPreferencesCompat { private static final Method sApplyMethod = findApplyMethod(); /** 反射查找apply的方法 */ @SuppressWarnings({
"unchecked", "rawtypes"}) private static Method findApplyMethod() { try { Class clz = SharedPreferences.Editor.class; return clz.getMethod("apply"); } catch (NoSuchMethodException e) { } return null; } /** 如果找到则使用apply执行,否则使用commit */ 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(); } } /** * @param context * @param fileName * @return isDebug = 返回修改路径(路径不存在会自动创建)以后的 SharedPreferences :%FILE_PATH%/%fileName%.xml
* !isDebug = 返回默认路径下的 SharedPreferences : /data/data/%package_name%/shared_prefs/%fileName%.xml */ private static SharedPreferences getSharedPreferences(Context context, String fileName) { if (isDebug) { try { // 获取ContextWrapper对象中的mBase变量。该变量保存了ContextImpl对象 Field field = ContextWrapper.class.getDeclaredField("mBase"); field.setAccessible(true); // 获取mBase变量 Object obj = field.get(context); // 获取ContextImpl。mPreferencesDir变量,该变量保存了数据文件的保存路径 field = obj.getClass().getDeclaredField("mPreferencesDir"); field.setAccessible(true); // 创建自定义路径 File file = new File(FILE_PATH); // 修改mPreferencesDir变量的值 field.set(obj, file); // 返回修改路径以后的 SharedPreferences :%FILE_PATH%/%fileName%.xml return context.getSharedPreferences(fileName, Activity.MODE_PRIVATE); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } // 返回默认路径下的 SharedPreferences : /data/data/%package_name%/shared_prefs/%fileName%.xml return context.getSharedPreferences(fileName, Context.MODE_PRIVATE); }}

 

转载于:https://www.cnblogs.com/Westfalen/p/5380737.html

你可能感兴趣的文章
查看硬盘负载情况:iostat命令
查看>>
《人月神话》阅读笔记03
查看>>
Linux下防火墙开启相关端口及查看已开启端口
查看>>
容器技术
查看>>
IE浏览器兼容的处理方式之一,使用特殊的注释 <!--[if IE]> ....<![endif]-->
查看>>
json对象和字符串的相互转换
查看>>
KendoUI>Framework>Datasource>Overview
查看>>
Java虚拟机的启动与程序的运行
查看>>
几个有用的java 7特性
查看>>
物联网系统框架介绍
查看>>
学习笔记之CloudCompare
查看>>
UEditor 与Struts2 结合上传图片
查看>>
《FPGA全程进阶---实战演练》第一章之FPGA介绍
查看>>
jackson用法
查看>>
PIVOT 用于将列值旋转为列名
查看>>
javaweb中的标签的核心标签库的常用标签
查看>>
copy与mutableCopy
查看>>
C#中结构函数和析构函数的用法
查看>>
CC2540串口输出调试功能
查看>>
px,dp,sp三者的转换
查看>>