編輯:關於Android編程
核心原理:
對象序列化
步驟
1.要保存的對象實現序列化Serializable
2.將序列化的對象保存String(本文的做法是保存為byte數組在轉為16進制的String類型保存起來)
3.將保存的String反序列化為對象
下面是完整代碼
步驟1.要保存的對象實現序列化Serializable
public class Sertest implements Serializable{ private String name; private int age; }步驟2。將序列化的對象保存String(本文的做法是保存為byte數組在轉為16進制的String類型保存起來)
步驟3.將保存的String反序列化為對象
/** * desc:保存對象 * @param context * @param key * @param obj 要保存的對象,只能保存實現了serializable的對象 * modified: */ public static void saveObject(Context context,String key ,Object obj){ try { // 保存對象 SharedPreferences.Editor sharedata = context.getSharedPreferences(FILENAME, 0).edit(); //先將序列化結果寫到byte緩存中,其實就分配一個內存空間 ByteArrayOutputStream bos=new ByteArrayOutputStream(); ObjectOutputStream os=new ObjectOutputStream(bos); //將對象序列化寫入byte緩存 os.writeObject(obj); //將序列化的數據轉為16進制保存 String bytesToHexString = bytesToHexString(bos.toByteArray()); //保存該16進制數組 sharedata.putString(key, bytesToHexString); sharedata.commit(); } catch (IOException e) { e.printStackTrace(); Log.e("", "保存obj失敗"); } } /** * desc:將數組轉為16進制 * @param bArray * @return * modified: */ public static 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 * @param key * @return * modified: */ public Object readObject(Context context,String key ){ try { SharedPreferences sharedata = context.getSharedPreferences(FILENAME, 0); if (sharedata.contains(key)) { String string = sharedata.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) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } //所有異常返回null return null; } /** * desc:將16進制的數據轉為數組 *創建人:聶旭陽 , 2014-5-25 上午11:08:33
* @param data * @return * modified: */ public static 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= '0' && hex_char1 <='9') int_ch1 = (hex_char1-48)*16; //// 0 的Ascll - 48 else if(hex_char1 >= 'A' && hex_char1 <='F') int_ch1 = (hex_char1-55)*16; //// A 的Ascll - 65 else return null; i++; char hex_char2 = hexString.charAt(i); ///兩位16進制數中的第二位(低位) int int_ch2; if(hex_char2 >= '0' && hex_char2 <='9') int_ch2 = (hex_char2-48); //// 0 的Ascll - 48 else if(hex_char2 >= 'A' && hex_char2 <='F') int_ch2 = hex_char2-55; //// A 的Ascll - 65 else return null; int_ch = int_ch1+int_ch2; retData[i/2]=(byte) int_ch;//將轉化後的數放入Byte裡 } return retData; }
我們都知道對於屬性動畫可以對某個屬性做動畫,而 插值器(TimeInterpolator)和 估值器(TypeEvaluator)在其中扮演了重要角色,下面先了解下 Ti
Android UI之FrameLayout(幀布局)說明:幀布局會為每個包含其中的組件開辟一個空白區域(稱為幀),這些幀是一層層疊加在一起的,有點類似於一層層覆蓋貼上去
/** * @param path 文件保存路徑 * @param data 保存數據 * */ public static void writeImage
最近在使用Matrix進行繪圖的操作。對Matrix的一些方法有了一些更深的體會,記下來,以便日後復習。Matrix常用的方法:一、變換方法:Matrix提供了trans