Класс данных Котлина, комната Android и пользовательский сеттер

У меня есть объект для Android Room, который выглядит так. Пока не беспокойтесь.

@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 } 

Теперь мне нужно зашифровать пароль. С Java это было бы просто сделано с установщиком, и это сработает.

Как бы вы это сделали с Котлином. Я не могу найти решение, чтобы объединить Android Room, настраиваемые настройки и классы данных.

Вы можете попробовать что-то вроде этого:

 @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')" } } 

Но я бы не рекомендовал шифровать пароль внутри Entity или каким-то образом его модифицировать, поскольку это не его ответственность, и вы можете столкнуться с ошибками с двойным шифрованием вашего пароля, как при извлечении вашего объекта из базы данных. Комната заполнит объект данными, которые приведут к шифрованию уже зашифрованных данных.

  @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 } 

Это создаст настраиваемый сеттер, поэтому каждый раз, когда вы устанавливаете свой пароль, вы можете его зашифровать и внутри сеттера.

Intereting Posts
Есть ли способ развернуть серверное приложение бэкэнд (Kotlin) в Firebase? Android (Kotlin) – CookieHandler не работает с методом POST, но с GET работает forEach внутри для каждого в Котлин Kotlin повторяемые @annotations не работают на jdk-8 Переменный список Obersable <Object> ждет, пока все они закончат, и объедините их в List <Object> Android: реорганизовать множество групп переключателей в одном действии Общие понятия Котлина: несоответствие типов в параметре общей карты Retrofit2 return null Единица в kotlin для 204 Нет ответа на контент Recruit-MP LightCalendarView – ошибка раздувания класса, noSuchMethodException Как идиоматически преобразовать типы NULL в Котлин? Почему мы пишем NextActivity :: class.java, хотя это класс kotlin? Методы Котлина с Vararg как первый параметр Почему компилятор не находит константу android.R.id.home? Свойство расширения с расширением Kotlin Какой законный способ получить аннотации к чистому качеству Котлина через отражение, они всегда отсутствуют?