如何在没有任何按钮的情况下将数据存储在 Android Room 数据库中?

时间:2021-07-20 11:25:11

标签: android kotlin android-room

如何在不单击任何按钮的情况下将数据保存在 Android Room 数据库中?例如:在三星笔记上,我们只需要在标题或正文上写上文字,笔记就会自动保存,无需点击任何按钮。我必须使用其中一个监听器吗?

3 个答案:

答案 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) 来保证您的数据在您的活动/应用程序被销毁时得到保存。