Пример #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());
    }
  }
Пример #2
0
  /**
   * 从文件读取属性值
   *
   * @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());
    }
  }