有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Room SQLite如何创建SELECT返回1对象?

我找到了很多房间教程,但没有一本能解释这一点

如何运行返回一个对象而不是LiveData的查询

我的房间里有这个方法:

@Dao
public interface TrainingDao {
    ....

    Query("SELECT * FROM " + TABLE_TRAININGS + " WHERE name =:name AND open =:open")
    Training fetchTrainingByName(String name, int open);

    ...
}

如果我在主线程上运行此方法,应用程序将崩溃,错误为“无法访问主线程上的数据库,因为…”

那么,如何在返回一个训练对象的AsyncTask中运行此查询


共 (1) 个答案

  1. # 1 楼答案

    https://developer.android.com/training/data-storage/room/accessing-data所述 Room不支持在主线程上访问数据库,除非您调用了allowMainThreadQueries()。当你刚回来的时候。您正在主线程上运行

    因此,您可以allowMainThreadQueries()或使用LiveData包装您的结果,如下所示,或者如果您喜欢RxJava,您甚至可以将其包装为FlowableSingle

    @Dao
    public interface TrainingDao {
        ....
    
        Query("SELECT * FROM " + TABLE_TRAININGS + " WHERE name =:name AND open =:open")
        LiveData<Training> fetchTrainingByName(String name, int open);
    
        ...
    }
    

    希望有帮助