-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
juyao
committed
Dec 5, 2018
1 parent
3b1aec6
commit 0e241a9
Showing
2 changed files
with
228 additions
and
1 deletion.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
227 changes: 227 additions & 0 deletions
227
jmvp/src/main/java/com/juyao/jmvp/utils/AppSharePreferenceMgr.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,227 @@ | ||
package com.juyao.jmvp.utils; | ||
|
||
/** | ||
* @author juyao | ||
* @date 2018/12/5 | ||
* @email [email protected] | ||
*/ | ||
import android.content.Context; | ||
import android.content.SharedPreferences; | ||
import android.graphics.Bitmap; | ||
import android.graphics.BitmapFactory; | ||
import android.graphics.drawable.BitmapDrawable; | ||
import android.util.Base64; | ||
import android.widget.ImageView; | ||
|
||
import java.io.ByteArrayInputStream; | ||
import java.io.ByteArrayOutputStream; | ||
import java.lang.reflect.InvocationTargetException; | ||
import java.lang.reflect.Method; | ||
import java.util.Map; | ||
|
||
/** | ||
* 主要功能:用于存储缓存数据 | ||
* | ||
* @Prject: CommonUtilLibrary | ||
* @Package: com.jingewenku.abrahamcaijin.commonutil | ||
* @author: AbrahamCaiJin | ||
* @date: 2017年05月04日 14:13 | ||
* @Copyright: 个人版权所有 | ||
* @Company: | ||
* @version: 1.0.0 | ||
*/ | ||
|
||
public class AppSharePreferenceMgr { | ||
/** | ||
* 保存在手机里面的文件名 | ||
*/ | ||
public static final String FILE_NAME = "share_data"; | ||
|
||
/** | ||
* 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 | ||
*/ | ||
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); | ||
} | ||
|
||
/** | ||
* 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 | ||
*/ | ||
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值已经对应的值 | ||
*/ | ||
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); | ||
} | ||
|
||
/** | ||
* 清除所有数据 | ||
*/ | ||
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是否已经存在 | ||
*/ | ||
public static boolean contains(Context context, String key) | ||
{ | ||
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, | ||
Context.MODE_PRIVATE); | ||
return sp.contains(key); | ||
} | ||
|
||
/** | ||
* 返回所有的键值对 | ||
*/ | ||
public static Map<String, ?> getAll(Context context) | ||
{ | ||
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, | ||
Context.MODE_PRIVATE); | ||
return sp.getAll(); | ||
} | ||
|
||
|
||
/** | ||
* 保存图片到SharedPreferences | ||
* @param mContext | ||
* @param imageView | ||
*/ | ||
public static void putImage(Context mContext, String key, ImageView imageView) { | ||
BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable(); | ||
Bitmap bitmap = drawable.getBitmap(); | ||
// 将Bitmap压缩成字节数组输出流 | ||
ByteArrayOutputStream byStream = new ByteArrayOutputStream(); | ||
bitmap.compress(Bitmap.CompressFormat.PNG, 80, byStream); | ||
// 利用Base64将我们的字节数组输出流转换成String | ||
byte[] byteArray = byStream.toByteArray(); | ||
String imgString = new String(Base64.encodeToString(byteArray, Base64.DEFAULT)); | ||
// 将String保存shareUtils | ||
AppSharePreferenceMgr.put(mContext, key, imgString); | ||
} | ||
|
||
/** | ||
* 从SharedPreferences读取图片 | ||
* @param mContext | ||
* @param imageView | ||
*/ | ||
public static Bitmap getImage(Context mContext, String key, ImageView imageView) { | ||
String imgString = (String) AppSharePreferenceMgr.get(mContext, key, ""); | ||
if (!imgString.equals("")) { | ||
// 利用Base64将我们string转换 | ||
byte[] byteArray = Base64.decode(imgString, Base64.DEFAULT); | ||
ByteArrayInputStream byStream = new ByteArrayInputStream(byteArray); | ||
// 生成bitmap | ||
return BitmapFactory.decodeStream(byStream); | ||
} | ||
return null; | ||
} | ||
|
||
/** | ||
* 创建一个解决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(); | ||
} | ||
} | ||
} |