Kotlin的数据类,Android室和自定义setter
我有一个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,这可以简单地用setter来完成,而且可以工作。
你怎么用Kotlin做到这一点。 我找不到将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 }
这将创建一个自定义设置器,所以每次你设置你的密码,你也可以在setter中进行加密。
- 如何设置android应用程序的自定义字体?
- Android Studio / Kotlin – 无效错误“覆盖方法应该调用超级”
- 如何将Java源文件的一部分转换为Kotlin?
- 在Recycler视图上复制适配器
- Observable.combineLatest更新到RxJava 2.xx后导致错误 – 不能推断类型
- 错误:com.app.android.dagger.component.AppComponent(unscoped)可能不引用作用域绑定:
- Android的工作室2.3总是挂出
- 多部分请求与改进@PartMap错误Kotlin(Android)
- 在Android库中使用Kotlin作为AAR分发