kotlin-room无法弄清楚如何保存这个字段

时间:2018-04-08 19:59:00

标签: android kotlin

我在Kotlin开始了我的第一个Android项目。官方文件建议我使用我做的房间。

添加Room后我无法编译我的项目。

无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。

Extra info about the error

warning: There are multiple good constructors and Room will pick the 
no-arg constructor. You can use the @Ignore annotation to eliminate 
unwanted constructors.
 public final class TodoData {
         ^  
 error: Cannot find setter for field.
 private final java.lang.Long id = null;
                             ^  
 error: Cannot find setter for field.
 private final java.lang.String firstName = null;
                               ^    
 error: Cannot find setter for field.
 private final java.lang.String lastName = null;
                               ^    

kotlin和房间的版本是:

  • ext.kotlin_version ='1.2.31'
  • ext.room_version ='1.0.0'

我的gradle.build依赖项如下所示:

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

// Room
implementation "android.arch.persistence.room:runtime:$room_version"
kapt "android.arch.persistence.room:compiler:$room_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

我还在文件顶部添加了:

申请插件:'kotlin-kapt'

这是我的Dao:

@Entity
data class TodoData(
    @PrimaryKey(autoGenerate = true)
    var od: Long? = null,
    var firstName: String = "",
    var lastName: String = ""
 ){
       constructor(): this(od = null, firstName = "", lastName = "")
 }

我尝试了什么:

  1. 更改Kotlin版本
  2. 添加setter和getter(Kotlin似乎不允许这样做)
  3. 将var设置为val
  4. 有人遇到过同样的问题并修好了吗?

    感谢您的时间!

    ps。:我不经常在Stackoverflow上发布内容 对我提出问题的方式的反馈意见将被接受。

1 个答案:

答案 0 :(得分:0)

为什么你有constructor()?您已经使用

定义了构造函数
data class TodoData(
    @PrimaryKey(autoGenerate = true)
    var od: Long? = null,
    var firstName: String = "",
    var lastName: String = ""
 )

删除constructor,一切都应该没问题。