[英]Kotlin + Room : java.lang.IllegalArgumentException: void cannot be converted to an Element
[英]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.