当我尝试将Dao更改为新的Flow
Api时,出现编译错误,指出了该问题
Not sure how to convert a Cursor to this method's return type
public abstract kotlinx.coroutines.flow.Flow<java.util.List<com.ezek.ezign.model.ECampaign>> readCampaigns();
道是
@Dao
interface CampaignDao {
@Query("SELECT * FROM campaign ORDER BY timeStamp ASC")
fun readCampaigns(): Flow<List<ECampaign>>
@Query("SELECT * FROM campaign WHERE id = :campaignId")
fun readCampaign(campaignId: Int): Flow<ECampaign>
}
和依赖项是
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2'
implementation "android.arch.persistence.room:runtime:$rootProject.ext.room_version"
kapt "android.arch.persistence.room:compiler:$rootProject.ext.room_version"
//room_version = "2.1.0"
我尝试同时使用List
和ArrayList
,但是没有运气。
谢谢。
答案 0 :(得分:30)
请勿在同一方法上同时使用suspend和Flow <>!像这样
@Query("SELECT * FROM user")
suspend fun loadAll(): Flow<Array<User>>
就
@Query("SELECT * FROM user")
suspend fun loadAll(): Array<User>
或
@Query("SELECT * FROM user")
fun loadAll(): Flow<Array<User>>
答案 1 :(得分:0)
您留下的评论是您使用2.1.0
作为会议室版本。请阅读this,您会发现使用2.2.0-alpha2
需要Flow
。更新版本,它应该可以工作。
2.2.0-alpha02房间广告的流量支持
答案 2 :(得分:0)
我尝试了其他答案中提供的方法,即避免在Flow
中使用具有LiveData
功能的DAO
和suspend
,但是仍然出现错误。
最后,我的问题与我的依赖关系有关。我有多个房间依赖性,例如:
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
kapt "android.arch.persistence.room:compiler:1.1.1"
implementation "androidx.room:room-ktx:$room_version"
仅要求最后一个时(请参阅编辑):
implementation "androidx.room:room-ktx:2.2.5"
编辑
实际上,这不是事实。它编译良好,但是当我启动该应用程序时,在运行时出现错误。
我可以通过交换编译器版本来使其工作:
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-ktx:$room_version"