首页 > 解决方案 > 协程流程:不确定如何将游标转换为此方法的返回类型

问题描述

当我尝试将 Dao 更改为新的FlowApi 时,我收到编译错误,指出

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"

我已经尝试过 BothListArrayList,但没有运气。

提前致谢。

标签: androidkotlinandroid-roomkotlin-coroutines

解决方案


不要在同一个方法上同时使用 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>>

推荐阅读