从Android本地数据库检索数据的正确方法是什么?

时间:2018-12-14 09:50:25

标签: android sqlite architecture android-room

我正在开发一个应用程序,并且我有一个本地SQLite数据库用于保留一些用户数据,并且我还使用Room持久性库,因为这是推荐的方法。我按照本教程创建了一个模型,一个DAO和一个数据库本身。因此,在活动中,我只是使用新线程填充了RecyclerView,它可以正常工作。
但是后来我在另一个视图中遇到了问题,我想将TextView文本更改为从数据库中获得的值。我不能像以前那样在另一个线程中执行此操作,因为我得到了CalledFromWrongThreadException,也因为我得到了IllegalStateException而无法从主线程调用它。我发现的所有教程都向我提供了有关数据库和DAO创建的已知信息,并且所有教程都使用allowMainThreadQueries()并附带说明,不应在生产中使用。但是,更多与问题相关的研究使我找到了使用runOnUiThread()的一些解决方法,但这在这里并不是真正的解决方案。所以我有一个问题:
我错过了任何直接的方法吗?(或者不是那么简单但合理)。

2 个答案:

答案 0 :(得分:1)

在您的情况下,对数据库的访问应该看起来像这样

 Thread{
        val text = dataBase.getDao().getText()
        Handler(Looper.getMainLooper()).post {
            textView.text = text
        }
    }.start()

但是使用LiveDataRxJava2可以更加舒适 试试这个LiveDataRxJava2

答案 1 :(得分:0)

使用Room的最干净方法是使用LiveData API和Lifecycle API,您可以检查link 我建议您观看其他Google代码实验室,它们对我有很大帮助