【发布时间】: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