分享一篇以前写的工具类

注意:写入和读取的对象必须实现序列化接口

public class LoginUserInfo  implements Serializable {...}

写入调用说明

/**

  • 方法描述: SharePreferences 保存对象
  • 调用方法SharePreferencesSaveObject(Context context,String fileName,String key ,Object obj);
  • @param context 上下文对象
  • @param fileName SharePreference 文件名称
  • @param key Key
  • @param obj 要保存的对象
  • @return void
  • */
 /*******************SharePreferences 保存对象 *****************************/ public static void SharePreferencesSaveObject(Context context,String fileName,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 String    */   private 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();   }   /*******************SharePreferences 保存对象 *****************************/

读取调用说明

/**
* 方法描述: 获取SharePreferences保存的Object对象
* 调用方法 Object obj= readSharePreferencesObject(Context context,String fileName,String key );
* @param context 上下文对象
* @param filename 读取文件名
* @param key
* @return 异常返回null,成功返回该对象
*/

   /*******************读取 SharePreferences 保存对象 *****************************/   public Object readSharePreferencesObject(Context context,String fileName,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进制的数据转为数组    * @param String data    * @return    */   private 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<hexString.length();i++)     {       int int_ch;  // 两位16进制数转化后的10进制数       char hex_char1 = hexString.charAt(i); ////两位16进制数中的第一位(高位*16)       int int_ch1;       if(hex_char1 >= '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;   }   /*******************读取 SharePreferences 保存对象 *****************************/

更多相关文章

  1. 【Android】Android实现截取当前屏幕图片并保存至SDCard
  2. Android(安卓)五大布局FrameLayout,LinearLayout ,AbsoluteLayou
  3. Android(安卓)gallery实现图片的左右循环旋转源码分享
  4. SharedPreferences之Android数据保存
  5. android对象池之Message
  6. Android第五个功能:文件存储到SDCard上面
  7. Android的绘制文本对象FontMetrics的介绍及绘制文本
  8. android进行录音功能并保存播放
  9. 箭头函数的基础使用

随机推荐

  1. Android夜间模式最佳实践
  2. Android 下搭建 基于Phonegap Web App
  3. [Android]中文API(一)android包下的那些
  4. Ubuntu编译Android系统源码问题记录
  5. 食客还是大厨
  6. 充实的九月,我要毕业了!
  7. Mono for android真难用
  8. Android(安卓)jni编译时 Android.mk文件
  9. android jni 学习之一
  10. Android(安卓)平台下的即时通讯