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

Android 从本地数据库检索数据的正确方法是什么?,android,sqlite,architecture,android-room,Android,Sqlite,Architecture,Android Room,我正在开发一个应用程序,我有一个本地SQLite数据库来保存一些用户数据,我也在使用Room持久性库,因为这是一种推荐的方法。我按照教程创建了一个模型、一个DAO和一个数据库本身。因此,在活动中,我只是使用新线程填充我的RecyclerView,它工作正常。 但是,我在另一个视图中遇到了一个问题,我想将TextView文本更改为从数据库获得的值。我不能像之前那样在另一个线程中调用它,因为我从ErrorThreadException调用它,我也不能从主线程调用它,因为我得到了IllegalStat

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

在您的情况下,对数据库的访问应该是这样的

 Thread{
        val text = dataBase.getDao().getText()
        Handler(Looper.getMainLooper()).post {
            textView.text = text
        }
    }.start()
但是使用LiveData或RxJava2可以更轻松地完成
试试这个,

使用Room最干净的方法是使用LiveData API和Lifecycle API,您可以查看 我建议你看看其他谷歌代码实验室,他们帮了我很多