/** * Created by 1 on 2018/1/15. */ public class SharedPreferencesHelper { private SharedPreferences sharedPreferences; /** * 保存在手机里面的名字 */ public static final String FILE_NAME = "shared_data"; private SharedPreferences.Editor editor; public SharedPreferencesHelper(Context context) { sharedPreferences = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); editor = sharedPreferences.edit(); } /** * 保存数据的方法,拿到数据保存数据的基本类型,然后根据类型调用不同的保存方法 * * @param key * @param object */ public void put(String key, Object object) { 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()); } editor.apply(); } /** * 获取保存数据的方法,我们根据默认值的到保存的数据的具体类型,然后调用相对于的方法获取值 * * @param key 键的值 * @param defaultObject 默认值 * @return */ public Object get(String key, Object defaultObject) { if (defaultObject instanceof String) { return sharedPreferences.getString(key, (String) defaultObject); } else if (defaultObject instanceof Integer) { return sharedPreferences.getInt(key, (Integer) defaultObject); } else if (defaultObject instanceof Boolean) { return sharedPreferences.getBoolean(key, (Boolean) defaultObject); } else if (defaultObject instanceof Float) { return sharedPreferences.getFloat(key, (Float) defaultObject); } else if (defaultObject instanceof Long) { return sharedPreferences.getLong(key, (Long) defaultObject); } else { return sharedPreferences.getString(key, null); } } /** * 移除某个key值已经对应的值 * * @param key */ public void remove(String key) { editor.remove(key); editor.apply(); } /** * 清除所有的数据 */ public void clear() { editor.clear(); editor.apply(); } /** * 查询某个key是否存在 * * @param key * @return */ public boolean contains(String key) { return sharedPreferences.contains(key); } /** * 返回所有的键值对 * * @return */ public Map<String, ?> getAll() { return sharedPreferences.getAll(); } /** * desc:保存对象 * * @param context * @param obj 要保存的对象,只能保存实现了serializable的对象 * modified: */ public void saveObject(Context context, String key, Object obj) { try { // 保存对象 //先将序列化结果写到byte缓存中,其实就分配一个内存空间 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream os = new ObjectOutputStream(bos); //将对象序列化写入byte缓存 os.writeObject(obj); //将序列化的数据转为16进制保存 String bytesToHexString = bytesToHexString(bos.toByteArray()); //保存该16进制数组 editor.putString(key, bytesToHexString); editor.commit(); } catch (IOException e) { e.printStackTrace(); Log.e("", "保存obj失败"); } } /** * desc:将数组转为16进制 * * @param bArray * @return modified: */ public String bytesToHexString(byte[] bArray) { if (bArray == null) { return null; } if (bArray.length == 0) { return ""; } StringBuffer sb = new StringBuffer(bArray.length); String sTemp; for (int i = 0; i < bArray.length; i++) { sTemp = Integer.toHexString(0xFF & bArray[i]); if (sTemp.length() < 2) sb.append(0); sb.append(sTemp.toUpperCase()); } return sb.toString(); } /** * desc:获取保存的Object对象 * * @param context * @return modified: */ public Object readObject(Context context, String key) { try { if (sharedPreferences.contains(key)) { String string = sharedPreferences.getString(key, ""); if (TextUtils.isEmpty(string)) { return null; } else { //将16进制的数据转为数组,准备反序列化 byte[] stringToBytes = StringToBytes(string); ByteArrayInputStream bis = new ByteArrayInputStream(stringToBytes); ObjectInputStream is = new ObjectInputStream(bis); //返回反序列化得到的对象 Object readObject = is.readObject(); return readObject; } } } catch (StreamCorruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } //所有异常返回null return null; } /** * desc:将16进制的数据转为数组 * <p>创建人:聂旭阳 , 2014-5-25 上午11:08:33</p> * * @param data * @return modified: */ public byte[] StringToBytes(String data) { String hexString = data.toUpperCase().trim(); if (hexString.length() % 2 != 0) { return null; } byte[] retData = new byte[hexString.length() / 2]; for (int i = 0; i < hexString.length(); i++) { int int_ch; // 两位16进制数转化后的10进制数 char hex_char1 = hexString.charAt(i); 两位16进制数中的第一位(高位*16) int int_ch3; if (hex_char1 >= '0' && hex_char1 <= '9') int_ch3 = (hex_char1 - 48) * 16; 0 的Ascll - 48 else if (hex_char1 >= 'A' && hex_char1 <= 'F') int_ch3 = (hex_char1 - 55) * 16; A 的Ascll - 65 else return null; i++; char hex_char2 = hexString.charAt(i); ///两位16进制数中的第二位(低位) int int_ch4; if (hex_char2 >= '0' && hex_char2 <= '9') int_ch4 = (hex_char2 - 48); 0 的Ascll - 48 else if (hex_char2 >= 'A' && hex_char2 <= 'F') int_ch4 = hex_char2 - 55; A 的Ascll - 65 else return null; int_ch = int_ch3 + int_ch4; retData[i / 2] = (byte) int_ch;//将转化后的数放入Byte里 } return retData; } }
SharedPreferences 封装,保存基本数据类型,保存对象,读取对象
最新推荐文章于 2021-10-28 13:41:44 发布