【问题标题】:kotlin+room error : [kapt] An exception occurred: java.lang.IllegalArgumentException: int cannot be converted to an Elementkotlin+room 错误:[kapt] 发生异常:java.lang.IllegalArgumentException:int 无法转换为元素
【发布时间】:2020-05-19 19:15:33
【问题描述】:

我遇到了一个与 Int 相关的错误:

[kapt] 发生异常:java.lang.IllegalArgumentException: int cannot be convert to an Element

我不明白为什么会这样。我也找不到类似问题的解决方案。我认为这个错误意味着 dao 无法处理 Int 并且无法更新数据库。

这是我的代码。

@Entity(tableName = "Promise")
data class Promise(
    @PrimaryKey(autoGenerate = true) val index : Int,

    @ColumnInfo(name = "date") val date : Int,

    @ColumnInfo(name = "content") val content : String
)


@Dao
interface PromiseDao {
    @Query("Select * from Promise")
    fun getAll() :List<Promise>

    @Query("select * from Promise order by date DESC limit 1")
    fun getRecent() :Promise

    @Insert
    fun insertPromise(date: Int, content:String)

}

@Database(entities = arrayOf(Promise::class), version = 1)
abstract class PromiseDatabase : RoomDatabase(){
    abstract fun promiseDao() : PromiseDao

    companion object{
        private var INSTANCE : PromiseDatabase? = null

        fun getInstance(context : Context) : PromiseDatabase{
            var tmpPromiseDB = INSTANCE

            if(tmpPromiseDB == null){
                tmpPromiseDB = Room.databaseBuilder(context.applicationContext, PromiseDatabase::class.java, "promise_database").build()
                INSTANCE = tmpPromiseDB
            }
            return tmpPromiseDB
        }
    }
}


class PostActivity : AppCompatActivity() {
    lateinit var promiseDatabase : PromiseDatabase
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_post)
        promiseDBinit()
        val cancelPost_imageView = findViewById(R.id.cancelPost_button) as ImageView
        val postHead_textView = findViewById(R.id.postHead_textView) as TextView
        val writePost_button = findViewById(R.id.writePost_button) as Button



        cancelPost_imageView.setOnClickListener(View.OnClickListener {
            onBackPressed()
        })
        writePost_button.setOnClickListener(View.OnClickListener {
            //DB에 올리는 과정
            var content = StringBuilder()
            content.append(postHead_textView.text.toString())
            promiseDatabase.promiseDao().insertPromise(System.currentTimeMillis().toInt(), content.toString())
        })
    }
    fun promiseDBinit(){
        promiseDatabase = PromiseDatabase.getInstance(applicationContext)
    }
}

【问题讨论】:

    标签: android android-room


    【解决方案1】:

    检查Room @Insert 语法

    改变这个:

    @Insert
        fun insertPromise(date: Int, content:String)
    

    到这里:

    @Insert
        fun insertPromise(promise: Promise)
    

    还有这个:

    promiseDatabase.promiseDao().insertPromise(System.currentTimeMillis().toInt(), content.toString())
    

    到这里:

    promiseDatabase.promiseDao().insertPromise(Promise(System.currentTimeMillis().toInt(), content.toString()))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多