code: public <E> void setFieldValue(ProfileField<E> field, E value) {
          if (field == null || value == null) {
              throw new NullPointerException();
          }
  
          if (getStatus(field) == FieldStatus.UNACCESSIBLE) {
              throw new IllegalStateException("Cannot write an unaccessible field");
          }
  
          String newVal = ProfileFieldConverter.forField(field).toStorageString(value);
          String currentVal = mFields.getString(field.getIdentifier());
  
          if (newVal.equals(currentVal)) {
              return;
          }
  
          if (getStatus(field) == FieldStatus.ORIGINAL) {
              setStatus(field.getIdentifier(), FieldStatus.MODIFIED);
          }
  
          mFields.putString(field.getIdentifier(), newVal);
      }
docs: Sets the value of a field in the container. After the first set of a field, calling {@link
  ProfileFieldContainer#isModified(ProfileField))} with it as parameter will return true.
  
  @param field - the fiel whose value to set
  @param value - the new value of the field.