/** * Copyright 2016 JustWayward Team * <p> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * <p> * http://www.apache.org/licenses/LICENSE-2.0 * <p> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.justwayward.reader.utils; import android.annotation.TargetApi; import android.content.Context; import android.content.SharedPreferences; import android.os.Build; import android.util.Base64; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.StreamCorruptedException; import java.util.Map; import java.util.Set; /** * Created by lfh on 2016/8/13. */ public class SharedPreferencesUtil { private static SharedPreferencesUtil prefsUtil; public Context context; public SharedPreferences prefs; public SharedPreferences.Editor editor; public synchronized static SharedPreferencesUtil getInstance() { return prefsUtil; } public static void init(Context context, String prefsname, int mode) { prefsUtil = new SharedPreferencesUtil(); prefsUtil.context = context; prefsUtil.prefs = prefsUtil.context.getSharedPreferences(prefsname, mode); prefsUtil.editor = prefsUtil.prefs.edit(); } private SharedPreferencesUtil() { } public boolean getBoolean(String key, boolean defaultVal) { return this.prefs.getBoolean(key, defaultVal); } public boolean getBoolean(String key) { return this.prefs.getBoolean(key, false); } public String getString(String key, String defaultVal) { return this.prefs.getString(key, defaultVal); } public String getString(String key) { return this.prefs.getString(key, null); } public int getInt(String key, int defaultVal) { return this.prefs.getInt(key, defaultVal); } public int getInt(String key) { return this.prefs.getInt(key, 0); } public float getFloat(String key, float defaultVal) { return this.prefs.getFloat(key, defaultVal); } public float getFloat(String key) { return this.prefs.getFloat(key, 0f); } public long getLong(String key, long defaultVal) { return this.prefs.getLong(key, defaultVal); } public long getLong(String key) { return this.prefs.getLong(key, 0l); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public Set<String> getStringSet(String key, Set<String> defaultVal) { return this.prefs.getStringSet(key, defaultVal); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public Set<String> getStringSet(String key) { return this.prefs.getStringSet(key, null); } public Map<String, ?> getAll() { return this.prefs.getAll(); } public boolean exists(String key) { return prefs.contains(key); } public SharedPreferencesUtil putString(String key, String value) { editor.putString(key, value); editor.commit(); return this; } public SharedPreferencesUtil putInt(String key, int value) { editor.putInt(key, value); editor.commit(); return this; } public SharedPreferencesUtil putFloat(String key, float value) { editor.putFloat(key, value); editor.commit(); return this; } public SharedPreferencesUtil putLong(String key, long value) { editor.putLong(key, value); editor.commit(); return this; } public SharedPreferencesUtil putBoolean(String key, boolean value) { editor.putBoolean(key, value); editor.commit(); return this; } public void commit() { editor.commit(); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public SharedPreferencesUtil putStringSet(String key, Set<String> value) { editor.putStringSet(key, value); editor.commit(); return this; } public void putObject(String key, Object object) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream out = null; try { out = new ObjectOutputStream(baos); out.writeObject(object); String objectVal = new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT)); editor.putString(key, objectVal); editor.commit(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (baos != null) { baos.close(); } if (out != null) { out.close(); } } catch (IOException e) { e.printStackTrace(); } } } public <T> T getObject(String key, Class<T> clazz) { if (prefs.contains(key)) { String objectVal = prefs.getString(key, null); byte[] buffer = Base64.decode(objectVal, Base64.DEFAULT); ByteArrayInputStream bais = new ByteArrayInputStream(buffer); ObjectInputStream ois = null; try { ois = new ObjectInputStream(bais); T t = (T) ois.readObject(); return t; } catch (StreamCorruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { try { if (bais != null) { bais.close(); } if (ois != null) { ois.close(); } } catch (IOException e) { e.printStackTrace(); } } } return null; } public SharedPreferencesUtil remove(String key) { editor.remove(key); editor.commit(); return this; } public SharedPreferencesUtil removeAll() { editor.clear(); editor.commit(); return this; } }