SharedPreferences sharedPre = getSharedPreferences(name, mode); 存: SharedPreferences.Editor editor = sharedPre.edit(); editor.put(key,value); editor.commit(); 取: value = sharedPre.get(key,defaultValue);
观察以上,存取的关键是规范好对<key,value>的操作。其中key为字符串为预先定义好的。如果有多组<key,value>,则为每组想好key的名称也是一件挺纠结的事。
本文为Sodino所有,转载请注明出处:http://blog.csdn.net/sodino/article/details/7979559
首先,事先定义好可处理的存取数据类型如下:
public static final int CLZ_BYTE = 1; public static final int CLZ_SHORT = 2; public static final int CLZ_INTEGER = 3; public static final int CLZ_LONG = 4; public static final int CLZ_STRING = 5; public static final int CLZ_BOOLEAN = 6; public static final int CLZ_FLOAT = 7; public static final int CLZ_DOUBLE = 8; public static final Map<Class<?>, Integer> TYPES; static { TYPES = new HashMap<Class<?>, Integer>(); TYPES.put(byte.class, CLZ_BYTE); TYPES.put(short.class, CLZ_SHORT); TYPES.put(int.class, CLZ_INTEGER); TYPES.put(long.class, CLZ_LONG); TYPES.put(String.class, CLZ_STRING); TYPES.put(boolean.class, CLZ_BOOLEAN); TYPES.put(float.class, CLZ_FLOAT); TYPES.put(double.class, CLZ_DOUBLE); }写出:
private void doSave(GoodsBean bean) { SharedPreferences sharedPre = getSharedPreferences(GoodsBean.class.getName(), Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPre.edit(); Class<? extends GoodsBean> clazz = bean.getClass(); Field[] arrFiled = clazz.getDeclaredFields(); try { for (Field f : arrFiled) { Log.d("ANDROID_LAB", "type[" + f.getType() + "] name[" + f.getName() + "]"); int type = TYPES.get(f.getType()); switch (type) { case CLZ_BYTE: case CLZ_SHORT: case CLZ_INTEGER: editor.putInt(f.getName(), f.getInt(bean)); break; case CLZ_LONG: editor.putLong(f.getName(), f.getLong(bean)); break; case CLZ_STRING: editor.putString(f.getName(), (String) f.get(bean)); break; case CLZ_BOOLEAN: editor.putBoolean(f.getName(), f.getBoolean(bean)); break; case CLZ_FLOAT: editor.putFloat(f.getName(), f.getFloat(bean)); break; case CLZ_DOUBLE: editor.putFloat(f.getName(), (float) f.getDouble(bean)); break; } } editor.commit(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }读入:
private GoodsBean doRead() { SharedPreferences sharedPre = getSharedPreferences(GoodsBean.class.getName(), Context.MODE_PRIVATE); GoodsBean bean = new GoodsBean(); Class<? extends GoodsBean> clazz = bean.getClass(); Field[] arrFiled = clazz.getDeclaredFields(); try { for (Field f : arrFiled) { int type = TYPES.get(f.getType()); switch (type) { case CLZ_BYTE: byte byteValue = (byte) sharedPre.getInt(f.getName(), 0); f.set(bean, byteValue); break; case CLZ_SHORT: short shortValue = (short) sharedPre.getInt(f.getName(), 0); f.set(bean, shortValue); break; case CLZ_INTEGER: int intValue = sharedPre.getInt(f.getName(), 0); f.set(bean, intValue); break; case CLZ_LONG: long longValue = sharedPre.getLong(f.getName(), 0L); f.set(bean, longValue); break; case CLZ_STRING: String str = sharedPre.getString(f.getName(), null); f.set(bean, str); break; case CLZ_BOOLEAN: boolean bool = sharedPre.getBoolean(f.getName(), false); f.set(bean, bool); break; case CLZ_FLOAT: float floatValue = sharedPre.getFloat(f.getName(), 0.0f); f.set(bean, floatValue); break; case CLZ_DOUBLE: double doubleValue = sharedPre.getFloat(f.getName(), 0.0f); f.set(bean, doubleValue); break; } } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return bean; }
GoodsBean.java
package lab.sodino.autosave; public class GoodsBean { public String name; public long time; public int price; public boolean isPaid; /** 测试用。 */ public byte testByte; /** 测试用。 */ public short testShort; public float cicle; public double testDouble; public String toString() { StringBuffer strBuffer = new StringBuffer(); strBuffer.append("name[" + name + "]\n"); strBuffer.append("time[" + time + "]\n"); strBuffer.append("price[" + price + "]\n"); strBuffer.append("isPaid[" + isPaid + "]\n"); strBuffer.append("cicle[" + cicle + "]\n"); strBuffer.append("testByte[" + testByte + "]\n"); strBuffer.append("testShort[" + testShort + "]\n"); strBuffer.append("testDouble[" + testDouble + "]\n"); return strBuffer.toString(); } public static GoodsBean newInstance() { GoodsBean bean = new GoodsBean(); bean.name = "AutoSave"; bean.time = 12345234252342l; bean.price = 1024; bean.isPaid = true; bean.cicle = 2.356f; bean.testByte = 8; bean.testShort = 128; bean.testDouble = 9856.2145d; return bean; } }
下篇:[Android] 数据实体的自动存取--SQLite篇