2017-05-27 40 views
14

我正在與房間持久性庫集成。我喜歡在科特林數據類:無法找到填充字段 - 使用Kotlin與房間數據庫

@Entity(tableName = "story") 
data class Story (
     @PrimaryKey val id: Long, 
     val by: String, 
     val descendants: Int, 
     val score: Int, 
     val time: Long, 
     val title: String, 
     val type: String, 
     val url: String 
) 

@Entity@PrimaryKey註解是爲客房庫。當我嘗試建立,它與錯誤而失敗:

Error:Cannot find setter for field. 
Error:Execution failed for task ':app:compileDebugJavaWithJavac'. 
> Compilation failed; see the compiler error output for details. 

我也嘗試提供一個默認的構造函數:

@Entity(tableName = "story") 
data class Story (
     @PrimaryKey val id: Long, 
     val by: String, 
     val descendants: Int, 
     val score: Int, 
     val time: Long, 
     val title: String, 
     val type: String, 
     val url: String 
) { 
    constructor() : this(0, "", 0, 0, 0, "", "", "") 
} 

但是,這並不正常工作。需要注意的是,如果我將這個Kotlin類轉換爲帶有getter和setter的Java類,它就可以工作。任何幫助表示讚賞!

+1

在https://github.com/googlesamples/android-architecture-components/blob/master/BasicRxJavaSampleKotlin/app/src/main/java/com/example /goroid/observability/persistence/User.kt從谷歌的例子中,不可變屬性沒有任何問題。有人可以分析原因嗎?它可能是一個錯誤? –

回答

48

由於您的字段標有val,因此它們實際上是最終的,並且沒有setter字段。

嘗試用var取消val。 您可能還需要初始化這些字段。

@Entity(tableName = "story") 
data class Story (
     @PrimaryKey var id: Long? = null, 
     var by: String = "", 
     var descendants: Int = 0, 
     var score: Int = 0, 
     var time: Long = 0L, 
     var title: String = "", 
     var type: String = "", 
     var url: String = "" 
) 
+2

該死!趕上:) – Nerd

+0

嘿,我覺得這件事很奇怪,你可以看看它嗎? https://stackoverflow.com/q/47323883/4620609 –

1

在Java中有了這個錯誤。您必須在構造函數中傳遞該字段並使用構造函數參數對其進行初始化,或者爲其創建一個setter。

例子:

public MyEntity(String name, ...) { 
    this.name = name; 
    ... 
} 

public void setName(String name) { 
    this.name = name; 
} 
1

嘿,我不知道,如果大家知道或沒有,但你不能擁有這是從is開始進入Room列。 例如,你不能有這樣的

@Entity(tableName = "user") 
    data class User (
     @PrimaryKey var id: Long? = null, 
     var userName: String = "", 
     var isConnectedToFB: Boolean = false, 
) 
+1

我的男人,你救了我幾天的調試。 – legalimpurity

相關問題