错误: Not sure how to convert a Cursor to this method’s return type

最近在使用Room+协程+LiveData查询数据的时候,我的查询方法定义如下:

    @Query("select * from user")suspend  fun getAllUsers(): LiveData<List<User>>

然而编译的时候报错了,报错信息如下:

错误: Not sure how to convert a Cursor to this method's return type

如果把suspend关键字去掉,就不报错了。

原因:

我原本以为查询动作应该是耗时操作,正常来讲结合协程使用时应该要加上 suspend 关键字以便于查询的时候可以挂起,然而,如果在Room中方法返回值得类型定义为 LiveData 时,那么,该方法则默认是 异步 的。详情可以查看官方文档
https://developer.android.google.cn/topic/libraries/architecture/livedata.html#use_livedata_with_room

也就是说 suspend 关键字不能和 LiveData 同时出现。

解决办法

方法有两种

1.使用 suspend 关键字结合协程使用

代码如下

    @Query("select * from user")suspend fun getAllUsers(): List<User>

结合协程进行查询

        viewModelScope.launch { var users= withContext(Dispatchers.IO){userDao.getAllUsers()}}

2.直接将LiveData作为返回值,查询时直接调用即可

    /*当返回值类型为 LiveData 时,默认就是异步的 我们无需使用suspend关键字修饰,去掉*/@Query("select * from user")fun getAllUsers(): LiveData<List<User>>

使用的时候直接用就行,不用处理线程切换的逻辑

lateinit var users: LiveData<List<User>>private var userDao: UserDaoinit {userDao = UserDataBase.instance.userDao()/*查  由于getAllUsers返回类型为LiveData类型  默认就异步的 所以无需使用协程 */users = userDao.getAllUsers()}

至于上面两种方法如何选择,根据自己的喜好就行


如果你觉得本文对你有帮助,麻烦动动手指顶一下,算是对本文的一个认可,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客 ,谢谢!

Android Room提示 错误: Not sure how to convert a Cursor to this method's return type的原因及解决办法相关推荐

  1. 服务器无响应 错误691,错误 691:由于域上的用户名和/密码无效而拒绝访问的原因及解决办法...

    当我们使用ADSL宽带连接上网的时候,由于网络不稳定的原因,难免会遇到"在核对用户名和密码"的时候,出现:"错误 691:由于域上的用户名和/密码无效而拒绝访问" ...

  2. 占书明:outlook发邮件时提示“出现意外错误”的原因及解决办法!

    占书明:outlook发邮件时提示"出现意外错误"的原因及解决办法! 有个使用者,在发送邮件时截了个图给我,如下"出现意外错误",便无法发送邮件: 使用环境:w ...

  3. iis提示“另一个程序正在使用此文件,进程无法访问。(异常来自HRESULT:0x80070020) ”解决办法...

    iis提示"另一个程序正在使用此文件,进程无法访问.(异常来自HRESULT:0x80070020) "解决办法 今天在做服务器测试的时候意外发生IIS的默认网站启不来,尝试启动的 ...

  4. 【转】error while loading shared libraries: xxx.so.x 错误的原因和解决办法

    原博客地址:http://www.cnblogs.com/Anker/p/3209876.html#undefined error while loading shared libraries: xx ...

  5. SSH连服务器时,连接不上,出现以下错误的原因与解决办法

    一."ssh: connect to host 192.168.110.249 port 22: Connection refused"错误的原因与解决办法 在用ssh远程登陆服务 ...

  6. Non-numeric box dimensions - simulation unstable 错误原因及解决办法

    大家好,我是小马老师. 本文继续介绍lammps常见的错误及解决办法:Non-numeric box dimensions - simulation unstable 最近几天,好几个培训班学员遇到这 ...

  7. android qq三方登录授权失败,QQ第三方登陆授权失败110401原因及解决办法分享

    qq第三方登陆授权失败出现代码110401是什么情况?遇到这种情况该如何解决?相信很多用户们在操作的时候都出现过类似的情况吧?下面是小编带来的攻略解析,一起来关注下! qq第三方登陆授权失败11040 ...

  8. LunarPages空间500错误原因及解决办法

    我们在使用LunarPages空间时,有时在安装程序时可能经常出现500错误这一般是由于服务器内部出现的错误引起的,那么导致500错误原因有哪些呢?又该如何解决呢?下面来说说500错误常见原因及解决办 ...

  9. 有关域索引错误产生的原因及解决办法

    1说明 数据库错误ORA-29861:域索引标记为LOADING/FAILED/UNUSABLE,其错误原因及解决办法,根据ORACLE官方文档的说法如下: // *Cause: An attempt ...

最新文章

  1. 计算机在我国开始被应用于,(),计算机在我国也开始被应用于会计工作,并由此引出了“会计电算化”这一具有强烈中国特色的专 - 试题答案网问答...
  2. matlab sort三维_matlab练习题
  3. c# 傅里叶变换 频域_傅里叶变换在MATLAB中的应用(频域滤波)
  4. android5.1蓝牙opp协议去掉Notification和Dialog操作提示
  5. python 学习笔记 while语句(11)
  6. Android实现局部图片滑动指引效果
  7. 数据分析引擎之Kylin学习笔记
  8. Word怎么删除空白页?6个方法随便用!
  9. Typora 0.11.18 beta版不能使用解决方法
  10. 基于蚁群算法的图像边缘检测
  11. HDOJ 5100 Chessboard 构造
  12. ES7、ES8、ES9、ES10新特性大盘点
  13. 从1,3,5,7,9,11,13,15中选3个数(选择可重复)作和得30
  14. android备份固件,安卓固件管家(Rom Manager Premium)
  15. operator 用法
  16. Mac苹果电脑如何一键清理磁盘内存空间?
  17. Springboot redis多数据源过期监听案例
  18. Lazada平台API:item_search - 按关键字搜索商品
  19. 删除Symbian模拟器中测试程序的方法
  20. Linux Ubuntu Python Django MTV后端开发

热门文章

  1. 使用HBuilderX云打包App之视频相机权限配置
  2. 安装Windows11体验WSA,安装常用Android应用测试
  3. 如何思考产品价值定位?
  4. 有时候qq邮箱不显示图片
  5. 深蓝学院-视觉SLAM理论与实践-第十二期-第3章作业
  6. Unable to locate appropriate constructor on class
  7. (CodeForce) C. Edgy Trees (并查集)
  8. Zigbee网络模型
  9. python 计算机网络课程设计(网络主机扫描程序)
  10. 20.EC实战 笔记本电脑的休眠唤醒是如何实现的