package cn.alphabets.light.util; import android.app.Application; import android.content.SharedPreferences; import org.apache.commons.codec.binary.Base64; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import cn.alphabets.light.network.ContextManager; /** * 保存应用程序的设定等数据,应用退出后不会消失 * Created by sh on 14-9-25. */ public class SharedData { private static final String PREFERENCES_NAME = "android.common.util.SharedData"; private static final int PREFERENCES_MODE = 0; private static SharedData instance = null; private SharedPreferences preferences; /** * 禁止生成实例使用 */ private SharedData() { } /** * 获取实例 * @return 实例 */ public static SharedData getInstance() { if (instance == null) { instance = new SharedData(); instance.initPreferences(); } return instance; } /** * 保存一个值 * @param key 标识 * @param val 值 */ public void push(String key, String val) { SharedPreferences.Editor editor = this.preferences.edit(); editor.putString(key, val); editor.commit(); } /** * 获取一个值,并删除 * @param key 标识 * @return 值 */ public String pop(String key) { SharedPreferences.Editor editor = this.preferences.edit(); String result = this.get(key); editor.remove(key); editor.commit(); return result; } public void remove(String key) { SharedPreferences.Editor editor = this.preferences.edit(); editor.remove(key); editor.commit(); } /** * 获取一个值 * @param key 标识 * @return 值 */ public String get(String key) { return this.preferences.getString(key, null); } /** * 添加一个对象,对象会被转换成base64编码的字符串保存 * @param key 标识 * @param val 对象 */ public void push(String key, Object val) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); try { new ObjectOutputStream(stream).writeObject(val); } catch (IOException e) { throw new RuntimeException("Object can not be converted to a byte."); } // 将字节流编码成base64的字符串 String base64 = new String(Base64.encodeBase64(stream.toByteArray())); SharedPreferences.Editor editor = this.preferences.edit(); editor.putString(key, base64); editor.commit(); } /** * 获取一个对象 * @param key 标识 * @return 对象 */ public Object getObject(String key) { String string = this.preferences.getString(key, null); if (string == null) { return null; } byte[] base64 = Base64.decodeBase64(string.getBytes()); try { return new ObjectInputStream(new ByteArrayInputStream(base64)).readObject(); } catch (Exception e) { throw new RuntimeException("Byte can not be converted to an object."); } } /** * 保存数值 * @param key 标识 * @param val 数 */ public void push(String key, int val) { SharedPreferences.Editor editor = this.preferences.edit(); editor.putInt(key, val); editor.commit(); } /** * 获取数值 * @param key 标识 * @return 数 */ public int getInt(String key) { return this.preferences.getInt(key, 0); } /** * 生成SharedPreferences的实例 */ private void initPreferences() { Application context = ContextManager.getInstance(); instance.preferences = context.getSharedPreferences(PREFERENCES_NAME, PREFERENCES_MODE); } /** * 销毁 */ public void destroy() { SharedPreferences.Editor editor = this.preferences.edit(); editor.clear(); editor.commit(); } }