Clase de datos de Kotlin, sala de Android y setter personalizado

Tengo una entidad para Android Room que se parece a eso. Hasta ahora, sin preocupaciones.

@Entity(tableName = "users", indices = arrayOf(Index(value = "nickName", unique = true))) data class User(@ColumnInfo(name = "nickName") var nickName: String, @ColumnInfo(name = "password") var password: String) { @ColumnInfo(name = "id") @PrimaryKey(autoGenerate = true) var id: Long = 0 } 

Ahora necesito encriptar la contraseña. Con Java, esto simplemente se haría con un setter y eso funcionaría.

¿Cómo harías eso con Kotlin? No puedo encontrar una solución para combinar Android Room, setters personalizados y classs de datos.

Puedes probar algo como esto:

 @Entity(tableName = "users", indices = arrayOf(Index(value = "nickName", unique = true))) data class User(@ColumnInfo(name = "nickName") var nickName: String, private var _password: String) { @ColumnInfo(name = "id") @PrimaryKey(autoGenerate = true) var id: Long = 0 @ColumnInfo(name = "password") var password: String = _password set(value) { field = "encrypted" } override fun toString(): String { return "User(id=$id, nickName='$nickName', password='$password')" } } 

Pero no recomendaría encriptar la contraseña dentro de Entity o modificarla de alguna manera ya que no es su responsabilidad y puede enfrentar errores con el doble encryption de su contraseña como cuando recupera su entidad de la database. Room poblará la entidad con datos que conducirán al encryption de datos ya encriptados.

  @Entity(tableName = "users", indices = arrayOf(Index(value = "nickName", unique = true))) data class User(@ColumnInfo(name = "nickName") var nickName: String, @ColumnInfo(name = "password") var password: String) { var _password = password set(value): String{ //encrypt password } @ColumnInfo(name = "id") @PrimaryKey(autoGenerate = true) var id: Long = 0 } 

Esto creará un setter personalizado así que cada vez que configure su contraseña puede encriptarla también dentro del setter.

  • La reflexión de Kotlin no está disponible
  • Importación de objects nesteds / funciones de objects en Kotlin
  • ¿Cuál es el objective pnetworkingeterminado para una anotación al anotar properties en Kotlin?
  • RuntimeException: no se puede crear una instancia de la actividad ComponentInfo ... ClassNotFoundException
  • Reemplazar el doble para cada uno por observable
  • Spring FacebookTemplate plantea una exception de permiso para el perfil del usuario
  • Kotlin class anónima esto
  • Usando @JvmOverloads de Kotlin con el patrón Fragment.newInstance () de Android
  • Kotlin en Android: no se puede encontrar el manifiesto principal fusionado. Que esta causando este error?
  • Regex: un metacarácter para reconocer cualquier tipo de personaje
  • Copie los documentos de KDoc de un método a otro