Android 开发工具类 09_SPUtils

SharedPreferences 辅助类:

1、保存在手机里面的文件名;

2、保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法;

3、得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值;

4、移除某个 key 值已经对应的值;

5、清除所有数据;

6、查询某个 key 是否已经存在;

7、返回所有的键值对;

8、创建一个解决 SharedPreferencesCompat.apply 方法的一个兼容类;

  1 import java.lang.reflect.InvocationTargetException;
  2 import java.lang.reflect.Method;
  3 import java.util.Map;
  4
  5 import android.content.Context;
  6 import android.content.SharedPreferences;
  7
  8 public class SPUtils
  9 {
 10     public SPUtils()
 11     {
 12         /* cannot be instantiated */
 13         throw new UnsupportedOperationException("cannot be instantiated");
 14     }
 15
 16     /**
 17      * 保存在手机里面的文件名
 18      */
 19     public static final String FILE_NAME = "share_data";
 20
 21     /**
 22      * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法
 23      *
 24      * @param context
 25      * @param key
 26      * @param object
 27      */
 28     public static void put(Context context, String key, Object object)
 29     {
 30
 31         SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
 32                 Context.MODE_PRIVATE);
 33         SharedPreferences.Editor editor = sp.edit();
 34
 35         if (object instanceof String)
 36         {
 37             editor.putString(key, (String) object);
 38         } else if (object instanceof Integer)
 39         {
 40             editor.putInt(key, (Integer) object);
 41         } else if (object instanceof Boolean)
 42         {
 43             editor.putBoolean(key, (Boolean) object);
 44         } else if (object instanceof Float)
 45         {
 46             editor.putFloat(key, (Float) object);
 47         } else if (object instanceof Long)
 48         {
 49             editor.putLong(key, (Long) object);
 50         } else
 51         {
 52             editor.putString(key, object.toString());
 53         }
 54
 55         SharedPreferencesCompat.apply(editor);
 56     }
 57
 58     /**
 59      * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值
 60      *
 61      * @param context
 62      * @param key
 63      * @param defaultObject
 64      * @return
 65      */
 66     public static Object get(Context context, String key, Object defaultObject)
 67     {
 68         SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
 69                 Context.MODE_PRIVATE);
 70
 71         if (defaultObject instanceof String)
 72         {
 73             return sp.getString(key, (String) defaultObject);
 74         } else if (defaultObject instanceof Integer)
 75         {
 76             return sp.getInt(key, (Integer) defaultObject);
 77         } else if (defaultObject instanceof Boolean)
 78         {
 79             return sp.getBoolean(key, (Boolean) defaultObject);
 80         } else if (defaultObject instanceof Float)
 81         {
 82             return sp.getFloat(key, (Float) defaultObject);
 83         } else if (defaultObject instanceof Long)
 84         {
 85             return sp.getLong(key, (Long) defaultObject);
 86         }
 87
 88         return null;
 89     }
 90
 91     /**
 92      * 移除某个 key 值已经对应的值
 93      *
 94      * @param context
 95      * @param key
 96      */
 97     public static void remove(Context context, String key)
 98     {
 99         SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
100                 Context.MODE_PRIVATE);
101         SharedPreferences.Editor editor = sp.edit();
102         editor.remove(key);
103         SharedPreferencesCompat.apply(editor);
104     }
105
106     /**
107      * 清除所有数据
108      *
109      * @param context
110      */
111     public static void clear(Context context)
112     {
113         SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
114                 Context.MODE_PRIVATE);
115         SharedPreferences.Editor editor = sp.edit();
116         editor.clear();
117         SharedPreferencesCompat.apply(editor);
118     }
119
120     /**
121      * 查询某个 key 是否已经存在
122      *
123      * @param context
124      * @param key
125      * @return
126      */
127     public static boolean contains(Context context, String key)
128     {
129         SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
130                 Context.MODE_PRIVATE);
131         return sp.contains(key);
132     }
133
134     /**
135      * 返回所有的键值对
136      *
137      * @param context
138      * @return
139      */
140     public static Map<String, ?> getAll(Context context)
141     {
142         SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
143                 Context.MODE_PRIVATE);
144         return sp.getAll();
145     }
146
147     /**
148      * 创建一个解决 SharedPreferencesCompat.apply 方法的一个兼容类
149      *
150      * @author zhy
151      *
152      */
153     private static class SharedPreferencesCompat
154     {
155         private static final Method sApplyMethod = findApplyMethod();
156
157         /**
158          * 反射查找 apply 的方法
159          *
160          * @return
161          */
162         @SuppressWarnings({ "unchecked", "rawtypes" })
163         private static Method findApplyMethod()
164         {
165             try
166             {
167                 Class clz = SharedPreferences.Editor.class;
168                 return clz.getMethod("apply");
169             } catch (NoSuchMethodException e)
170             {
171             }
172
173             return null;
174         }
175
176         /**
177          * 如果找到则使用 apply 执行,否则使用 commit
178          *
179          * @param editor
180          */
181         public static void apply(SharedPreferences.Editor editor)
182         {
183             try
184             {
185                 if (sApplyMethod != null)
186                 {
187                     sApplyMethod.invoke(editor);
188                     return;
189                 }
190             } catch (IllegalArgumentException e)
191             {
192             } catch (IllegalAccessException e)
193             {
194             } catch (InvocationTargetException e)
195             {
196             }
197             editor.commit();
198         }
199     }
200
201 }
时间: 2024-10-11 05:12:18

Android 开发工具类 09_SPUtils的相关文章

android开发工具类总结(一)

一.日志工具类 Log.java 1 public class L 2 { 3 private L() 4 { 5 /* 不可被实例化 */ 6 throw new UnsupportedOperationException("Cannot be instantiated!"); 7 } 8 // 是否需要打印bug,可以在application的onCreate函数里面初始化 9 public static boolean isDebug = true; 10 private sta

Android 开发工具类 13_ SaxService

网络 xml 解析方式 1 package com.example.dashu_saxxml; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.HashMap; 6 import java.util.List; 7 8 import javax.xml.parsers.SAXParser; 9 import javax.xml.parsers.SAXParserFactory; 10

Android 开发工具类 35_PatchUtils

增量更新工具类[https://github.com/cundong/SmartAppUpdates] 1 import java.io.File; 2 3 import android.app.Activity; 4 import android.app.ProgressDialog; 5 import android.content.Context; 6 import android.content.Intent; 7 import android.net.Uri; 8 import and

Android开发工具类之DownloadManagerPro

这个工具类就是Android系统下载管理DownloadManager的一个增强类,提供了一些增强方法.或许大家不太了解这个安卓系统自带的DownloadManager这个类,我先做一个简单介绍吧.DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类DownloadManager.Query和DownloadManager.Request. DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息.用d

Android 开发工具类 03_HttpUtils

Http 请求的工具类: 1.异步的 Get 请求: 2.异步的 Post 请求: 3.Get 请求,获得返回数据: 4.向指定 URL 发送 POST方法的请求. 1 import java.io.BufferedReader; 2 import java.io.ByteArrayOutputStream; 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.InputStreamReader

Android 开发工具类 19_NetworkStateReceiver

检测网络状态改变类: 1.注册网络状态广播: 2.检查网络状态: 3.注销网络状态广播: 4.获取当前网络状态,true为网络连接成功,否则网络连接失败: 5.注册网络连接观察者: 6.注销网络连接观察者. 1 import java.util.ArrayList; 2 3 import android.content.BroadcastReceiver; 4 import android.content.Context; 5 import android.content.Intent; 6 i

Android 开发工具类 10_Toast 统一管理类

Toast 统一管理类: 1.短时间显示Toast: 2.长时间显示 Toast: 3.自定义显示 Toast 时间. 1 import android.content.Context; 2 import android.widget.Toast; 3 4 // Toast 统一管理类 5 public class T 6 { 7 8 private T() 9 { 10 /* cannot be instantiated */ 11 throw new UnsupportedOperation

Android 开发工具类 33_开机自运行

原理:该类派生自 BroadcastReceiver,重载方法 onReceive ,检测接收到的 Intent 是否符合 BOOT_COMPLETED,如果符合,则启动用户Activity. 1 import android.content.BroadcastReceiver; 2 import android.content.Context; 3 import android.content.Intent; 4 5 public class BootBroadcastReceiver ext

Android 开发工具类 31_WebService 获取手机号码归属地

AndroidInteractWithWebService.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12=