編輯:關於android開發
對於App開發者,抽象來說,其實就是將數據以各種各樣的方式展示在用戶面前以及采集用戶的數據。采集用戶的數據包括用戶的輸入、觸摸、傳感器等,展示的數據通過網絡來源於各業務系統,以及用戶的
輸入數據。在這個過程中,數據存儲顯得由為重要。這也是我做為開端講解的目的。良好的運用數據存儲,不僅的能有效減少訪問服務器的次數、用戶的流量,還能加快App的響應速度,甚至簡化應用的業務邏輯。數據
存儲這一塊將介紹常用的2種數據緩存方式,Android SharedPreferences文件數據存儲作為一章,sqlite 作為一章。另外我這一系列的介紹都不會有介紹基礎的api,適合有一定基礎的童鞋。
簡單粗暴,開始SharedPreferences。SharedPreferences是Android平台上一個輕量級的存儲類,用來保存應用的一些常用配置。是以xml方式來保存,整體效率來看不是特別的高,對於常規的輕量級而言比SQLite
要好不少,xml處理時Dalvik會通過自帶底層的本地XML Parser解析。下面直接上代碼。
/**
* SharedPreferences 數據存儲工具類
*
*
*/
public class SPUtil {
private static String PreferenceName = "Constant";
/**
* 儲存復雜的數據對象字段
*
* @param key
* @param t
* @return
*/
public static <T> boolean saveObjectToShare(String key, T t) {
return saveObjectToShare(AppContext.getApplication(), PreferenceName,
key, t);
}
/**
* 儲存復雜的數據字段對象
*
* @param context
* @param key
* @param t
* @return
*/
public static <T> boolean saveObjectToShare(Context context, String key, T t) {
return saveObjectToShare(context, PreferenceName, key, t);
}
/**
*
* @param context
* @param name
* @param key
* @param t
* @return
*/
public static <T> boolean saveObjectToShare(Context context, String name,
String key, T t) {
try {
SharedPreferences sp = context.getSharedPreferences(name,
Context.MODE_PRIVATE);
// 存儲
Editor editor = sp.edit();
if (t == null) {
editor.putString(key, "");
editor.commit();
return true;
}
ByteArrayOutputStream toByte = new ByteArrayOutputStream();
ObjectOutputStream oos;
oos = new ObjectOutputStream(toByte);
oos.writeObject(t);
// 對byte[]進行Base64編碼
String payCityMapBase64 = new String(Base64.encode(
toByte.toByteArray(), Base64.DEFAULT));
editor.putString(key, payCityMapBase64);
editor.commit();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* 得到復雜的數據對象
*
* @param key
* @return
*/
public static <T> T getObjectFromShare(String key) {
return getObjectFromShare(AppContext.getApplication(), PreferenceName,
key);
}
/**
* 得到復雜的數據對象
*
* @param context
* @param key
* @return
*/
public static <T> T getObjectFromShare(Context context, String key) {
return getObjectFromShare(context, PreferenceName, key);
}
/**
* 得到復雜的數據對象
*
* @param key
* @param object
*/
@SuppressWarnings("unchecked")
public static <T> T getObjectFromShare(Context context, String name,
String key) {
try {
SharedPreferences sp = context.getSharedPreferences(name,
Context.MODE_PRIVATE);
String payCityMapBase64 = sp.getString(key, "");
if (payCityMapBase64.length() == 0) {
return null;
}
byte[] base64Bytes = Base64
.decode(payCityMapBase64, Base64.DEFAULT);
ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
return (T) ois.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 返回String類型數據,默認是“”;
*
* @param key
* @return
*/
public static String getString(String key) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
return sp.getString(key, "");
}
/**
* 存儲boolean數據類型
*
* @param key
* @param value
*/
public static void saveboolean(String key, boolean value) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putBoolean(key, value);
editor.commit();
}
/**
* 返回boolean類型數據,默認是true;
*
* @param key
* @return
*/
public static boolean getBoolean(String key) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
return sp.getBoolean(key, false);
}
/**
* 存儲int數據類型
*
* @param key
* @param value
*/
public static void saveInt(String key, int value) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putInt(key, value);
editor.commit();
}
/**
* 返回int類型數據,默認是true;
*
* @param key
* @return
*/
public static int getInt(String key) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
return sp.getInt(key, 0);
}
/**
* 存儲float數據類型
*
* @param key
* @param value
*/
public static void saveFloat(String key, float value) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putFloat(key, value);
editor.commit();
}
/**
* 返回float類型數據,默認是true;
*
* @param key
* @return
*/
public static float getFloat(String key) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
return sp.getFloat(key, 0);
}
/**
* 存儲long數據類型
*
* @param key
* @param value
*/
public static void saveLong(String key, long value) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putLong(key, value);
editor.commit();
}
/**
* 返回long類型數據,默認是true;
*
* @param key
* @return
*/
public static long getLong(String key) {
SharedPreferences sp = AppContext.getApplication()
.getSharedPreferences(PreferenceName, Context.MODE_PRIVATE);
return sp.getLong(key, 0);
}
}
SPUtil作為一個工具類,封裝了SharedPreferences的基本所有的靜態寫入、讀取方法。包含int long String boolean 以及復雜的對象。可以快速的實現SharedPreferences的操作。具體在apps裡面常用於一些系統的配置,比如常見
的在個人設置裡面會有是否允許消息推送、是否自動檢測版本更新的checkbox。我試過有的項目的這些設置的存儲也通過網絡存儲在服務器,但大部分都是存儲在本地。另外有時候遇到過一些listview裡面的數據集合的簡單緩存以及讀取,也沒必
要勞師動眾的建sqlte表,直接做對象序列號存儲,有時候可以省很多的事情。下一篇將開始講解sqlite的數據存儲,如果有什麼建議,可以給我留言。
Android自定義控件2--優酷菜單界面初始化,android2--本文開始將逐步去實現下面優酷菜單的效果: 本文地址:http://www.cnblogs.com/
unity的 斷言 Unity 5.1 Assertion Library 當你建立Unity 的手機游戲你最可能渴望設置Script Call Optimization
android 自定義控件屬性(TypedArray以及attrs解釋) 最近在搗鼓android 自定義控件屬性,學到了TypedArray以及attrs。在這其中看了
《Android Studio實用指南》12.18 文本搜索工具 Android Studio中提供了非常方便的搜索工具,可以在編輯器的文件中使用,也可以在andr
Android Studio2.1.2 Java8環境下引用Java L