/** * 向文件写入属性值 * * @param editor 指定的编辑器 * @param field 要写入的属性 * @param obj 取值对象 * @param pre key前缀 */ private void put(SharedPreferences.Editor editor, Field field, Object obj, String pre) { // 关闭属性访问权限检查 field.setAccessible(true); try { Log.v(LOG_TAG + "put", "field type is " + field.getType().getName()); Log.v(LOG_TAG + "put", "field name is " + field.getName()); Log.v(LOG_TAG + "put", "field value is " + field.get(obj)); // 是否需要加密 if (cipher != null && field.isAnnotationPresent(Encrypt.class)) { Log.v(LOG_TAG + "put", "field " + field.getName() + " use encrypt"); Object data = field.get(obj); if (data != null) { editor.putString(pre + "." + field.getName(), cipher.encrypt(String.valueOf(data))); } return; } // 根据属性类型选择操作 switch (field.getType().getName()) { case "java.lang.String": editor.putString(pre + "." + field.getName(), (String) field.get(obj)); break; case "int": editor.putInt(pre + "." + field.getName(), field.getInt(obj)); break; case "boolean": editor.putBoolean(pre + "." + field.getName(), field.getBoolean(obj)); break; case "float": editor.putFloat(pre + "." + field.getName(), field.getFloat(obj)); break; case "long": editor.putLong(pre + "." + field.getName(), field.getLong(obj)); break; } } catch (IllegalAccessException e) { Log.d(LOG_TAG + "put", "IllegalAccessException is " + e.getMessage()); } }
/** * 从文件读取属性值 * * @param reader 读取器 * @param field 要读取的属性 * @param obj 目标对象 * @param pre key前缀 */ private void push(SharedPreferences reader, Field field, Object obj, String pre) { // 关闭属性访问权限检查 field.setAccessible(true); try { Log.v(LOG_TAG + "push", "field type is " + field.getType().getName()); Log.v(LOG_TAG + "push", "field name is " + field.getName()); // 是否需要解密 if (cipher != null && field.isAnnotationPresent(Encrypt.class)) { Log.v(LOG_TAG + "push", "field " + field.getName() + " need decrypt"); String cipherText = reader.getString(pre + "." + field.getName(), (String) field.get(obj)); if (cipherText != null) { String data = cipher.decrypt(cipherText); // 根据属性类型选择操作 switch (field.getType().getName()) { case "java.lang.String": field.set(obj, data); break; case "int": field.setInt(obj, Integer.parseInt(data)); break; case "boolean": field.setBoolean(obj, Boolean.parseBoolean(data)); break; case "float": field.setFloat(obj, Float.parseFloat(data)); break; case "long": field.setLong(obj, Long.parseLong(data)); break; } } return; } // 根据属性类型选择操作 switch (field.getType().getName()) { case "java.lang.String": field.set(obj, reader.getString(pre + "." + field.getName(), (String) field.get(obj))); break; case "int": field.setInt(obj, reader.getInt(pre + "." + field.getName(), field.getInt(obj))); break; case "boolean": field.setBoolean( obj, reader.getBoolean(pre + "." + field.getName(), field.getBoolean(obj))); break; case "float": field.setFloat(obj, reader.getFloat(pre + "." + field.getName(), field.getFloat(obj))); break; case "long": field.setLong(obj, reader.getLong(pre + "." + field.getName(), field.getLong(obj))); break; } Log.v(LOG_TAG + "push", "field value is " + field.get(obj)); } catch (IllegalAccessException e) { Log.d(LOG_TAG + "push", "IllegalAccessException is " + e.getMessage()); } }