Android Room提示 错误: Not sure how to convert a Cursor to this method's return type的原因及解决办法
错误: 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的原因及解决办法相关推荐
- 服务器无响应 错误691,错误 691:由于域上的用户名和/密码无效而拒绝访问的原因及解决办法...
当我们使用ADSL宽带连接上网的时候,由于网络不稳定的原因,难免会遇到"在核对用户名和密码"的时候,出现:"错误 691:由于域上的用户名和/密码无效而拒绝访问" ...
- 占书明:outlook发邮件时提示“出现意外错误”的原因及解决办法!
占书明:outlook发邮件时提示"出现意外错误"的原因及解决办法! 有个使用者,在发送邮件时截了个图给我,如下"出现意外错误",便无法发送邮件: 使用环境:w ...
- iis提示“另一个程序正在使用此文件,进程无法访问。(异常来自HRESULT:0x80070020) ”解决办法...
iis提示"另一个程序正在使用此文件,进程无法访问.(异常来自HRESULT:0x80070020) "解决办法 今天在做服务器测试的时候意外发生IIS的默认网站启不来,尝试启动的 ...
- 【转】error while loading shared libraries: xxx.so.x 错误的原因和解决办法
原博客地址:http://www.cnblogs.com/Anker/p/3209876.html#undefined error while loading shared libraries: xx ...
- SSH连服务器时,连接不上,出现以下错误的原因与解决办法
一."ssh: connect to host 192.168.110.249 port 22: Connection refused"错误的原因与解决办法 在用ssh远程登陆服务 ...
- Non-numeric box dimensions - simulation unstable 错误原因及解决办法
大家好,我是小马老师. 本文继续介绍lammps常见的错误及解决办法:Non-numeric box dimensions - simulation unstable 最近几天,好几个培训班学员遇到这 ...
- android qq三方登录授权失败,QQ第三方登陆授权失败110401原因及解决办法分享
qq第三方登陆授权失败出现代码110401是什么情况?遇到这种情况该如何解决?相信很多用户们在操作的时候都出现过类似的情况吧?下面是小编带来的攻略解析,一起来关注下! qq第三方登陆授权失败11040 ...
- LunarPages空间500错误原因及解决办法
我们在使用LunarPages空间时,有时在安装程序时可能经常出现500错误这一般是由于服务器内部出现的错误引起的,那么导致500错误原因有哪些呢?又该如何解决呢?下面来说说500错误常见原因及解决办 ...
- 有关域索引错误产生的原因及解决办法
1说明 数据库错误ORA-29861:域索引标记为LOADING/FAILED/UNUSABLE,其错误原因及解决办法,根据ORACLE官方文档的说法如下: // *Cause: An attempt ...
最新文章
- 计算机在我国开始被应用于,(),计算机在我国也开始被应用于会计工作,并由此引出了“会计电算化”这一具有强烈中国特色的专 - 试题答案网问答...
- matlab sort三维_matlab练习题
- c# 傅里叶变换 频域_傅里叶变换在MATLAB中的应用(频域滤波)
- android5.1蓝牙opp协议去掉Notification和Dialog操作提示
- python 学习笔记 while语句(11)
- Android实现局部图片滑动指引效果
- 数据分析引擎之Kylin学习笔记
- Word怎么删除空白页?6个方法随便用!
- Typora 0.11.18 beta版不能使用解决方法
- 基于蚁群算法的图像边缘检测
- HDOJ 5100 Chessboard 构造
- ES7、ES8、ES9、ES10新特性大盘点
- 从1,3,5,7,9,11,13,15中选3个数(选择可重复)作和得30
- android备份固件,安卓固件管家(Rom Manager Premium)
- operator 用法
- Mac苹果电脑如何一键清理磁盘内存空间?
- Springboot redis多数据源过期监听案例
- Lazada平台API:item_search - 按关键字搜索商品
- 删除Symbian模拟器中测试程序的方法
- Linux Ubuntu Python Django MTV后端开发