首页 > 解决方案 > 动态查询房间数据库不支持 LiveData 吗?

问题描述

我读过文章

Room 支持@RawQuery注解在运行时构造查询,例如 Code A。

如果我使用代码 B,则在编译时会出现错误 B。

好像@RawQuery不支持returnLiveData吧?

代码 A

interface DBVoiceDao{ 

   @RawQuery
   fun  runtimeQuery(sortQuery: SupportSQLiteQuery): List<MVoice>
    ...
}

代码 B

interface DBVoiceDao{ 

   @RawQuery
   fun  runtimeQuery(sortQuery: SupportSQLiteQuery): LiveData<List<MVoice>>
    ...
}

错误 B

Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide `room.schemaLocation` annotation processor argument OR set exportSchema to false.
public abstract class DBVoiceDatabase extends androidx.room.RoomDatabase {
                ^[WARN] Incremental annotation processing requested, but support is disabled because the following processors are not incremental: androidx.room.RoomProcessor (DYNAMIC).                                    

标签: androidandroid-room

解决方案


它确实支持它,但您必须指定观察到的实体,如此处所述 https://developer.android.com/reference/androidx/room/RawQuery示例:

@Dao
 interface RawDao {
   @RawQuery(observedEntities = Song.class)
   LiveData<List<Song>> getSongs(SupportSQLiteQuery query);
 }

推荐阅读