2017-07-06 16 views
3

私はそれのように見えるAndroid Roomのエンティティを得ました。これまでのところ、心配はありません。Kotlinのデータクラス、Androidルームとカスタムセッター

​​3210

パスワードを暗号化する必要があります。 Javaでは、これは単にセッターで行われ、それはうまくいくでしょう。

あなたはKotlinでそれをどうしますか?私はAndroid Room、カスタムセッター、データクラスを組み合わせるソリューションを見つけることができません。

+0

なぜ値の設定を上書きできないのですか? – tyczj

+0

あなたの質問は不明です。 「Javaでは、これは単に設定者を使って行うことができ、それはうまくいく」 Kotlinの変更可能なプロパティに何が問題になっていますか? – Egor

+0

@Egorデータクラスではどうしますか?私的な '_password'フィールドを経由しますか?その場合、@ColumnInfoのどこにワイヤを張っていますか? –

答えて

-4

パスワードを設定するたびにカスタムセッターが作成されるため、セッター内でもパスワードを暗号化できます。

+0

もコンパイルされません – guenhter

+0

IDEコンパイルエラーが発生します。「オーバーロードの解決があいまいです」 –

+0

更新された回答を試してください –

2

あなたはこのような何か試すことができます。

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

} 

をしかし、私はそれがその責任ではないとして、エンティティ内のパスワードを暗号化するか、何とかそれを修正することはお勧めしませんし、あなたのパスワードの二重暗号とエラーに直面する可能性データベースからエンティティを取得するときと同様に、Roomはエンティティにデータを入力します。これにより、すでに暗号化されたデータが暗号化されます。

関連する問題