content: package com.jingewenku.abrahamcaijin.commonutil;
  
  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();
          }
      }
  }
  