コード例 #1
0
  /**
   * 向文件写入属性值
   *
   * @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());
    }
  }