/** * 从文件读取属性值 * * @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()); } }