协程流程:不确定如何将游标转换为此方法的返回类型
Posted
技术标签:
【中文标题】协程流程:不确定如何将游标转换为此方法的返回类型【英文标题】:coroutine Flow : Not sure how to convert a Cursor to this method's return type 【发布时间】:2020-03-28 22:12:04 【问题描述】:当我尝试将 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
,但没有运气。
提前致谢。
【问题讨论】:
【参考方案1】:不要在同一个方法上同时使用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>>
【讨论】:
“不要在同一个方法上同时使用suspend和Flow”——这应该是错误信息 返回Flow时不需要使用suspend关键字 @ScottCooper 那不能做,它会让我们的生活变得太容易。 @X09 我们基本上是通过在 *** 上搜索问题而获得报酬【参考方案2】:您留下了一条评论说您正在使用 2.1.0
作为房间版本。请阅读this,您会发现使用Flow
需要2.2.0-alpha2
。更新版本,它应该可以工作。
Room 2.2.0-alpha02 宣传 Flow 支持
【讨论】:
【参考方案3】:我尝试了其他答案中提供的方法,即避免 DAO
中的 Flow
和 LiveData
具有 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"
【讨论】:
以上是关于协程流程:不确定如何将游标转换为此方法的返回类型的主要内容,如果未能解决你的问题,请参考以下文章
Android 房间数据库 - 不确定如何将 Cursor 转换为此方法的返回类型
Room:不确定如何将 Cursor 转换为此方法的返回类型
如何在 ROOM android 中修复“不确定如何将光标转换为此方法的返回类型”
Paging3:在 Room DAO 中使用 PagingSource 作为返回类型时,“不确定如何将 Cursor 转换为此方法的返回类型”