簡體   English   中英

kotlin+room 錯誤:[kapt] 發生異常:java.lang.IllegalArgumentException:int 無法轉換為元素

[英]kotlin+room error : [kapt] An exception occurred: java.lang.IllegalArgumentException: int cannot be converted to an Element

我遇到了一個與 Int 相關的錯誤:

[kapt] 發生異常:java.lang.IllegalArgumentException:int 無法轉換為元素

我不明白為什么會這樣。 我也找不到類似問題的解決方案。我認為這個錯誤意味着 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)
    }
}

檢查室@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()))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM