如何在不单击任何按钮的情况下将数据保存在 Android Room 数据库中?例如:在三星笔记上,我们只需要在标题或正文上写上文字,笔记就会自动保存,无需点击任何按钮。我必须使用其中一个监听器吗?
答案 0 :(得分:1)
您可以将 TextChangeListener 添加到 EditText 中,并像这样将添加数据的逻辑放到 afterTextChanged() 方法中。
binding.editText.addTextChangedListener(object :TextWatcher{
var timer: CountDownTimer? = null
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
override fun afterTextChanged(s: Editable?) {
timer?.cancel()
timer = object : CountDownTimer(1000, 1500) {
override fun onTick(millisUntilFinished: Long) {}
override fun onFinish() {
//Put your data storing code here
}
}.start()
}
})
您可以根据需要更改时间间隔。
答案 1 :(得分:0)
您可以在视图的 onDestroy()
中保存数据,或在此处添加 textChangeListener
并更新您的数据库(不推荐!)
答案 2 :(得分:0)
如果您想要一致的自动保存,您真的应该使用 RxJava 或 Kotlin 协程(甚至更好),因为 Room 完全支持它们。您需要添加以下任一依赖项:
implementation "androidx.room:room-ktx:$room_version"
implementation "androidx.room:room-rxjava2:$room_version"
implementation "androidx.room:room-rxjava3:$room_version"
然后,您可以安排您的协程每 5 分钟或您喜欢的任何时间间隔保存到 Room。
附言对于 Kotlin 协程,使用 withContext(NonCancellable) 来保证您的数据在您的活动/应用程序被销毁时得到保存。