当前位置: 首页 > 知识库问答 >
问题:

Room“不确定如何将游标转换为此方法的返回类型”:哪个方法?

殷永嘉
2023-03-14
Error:Not sure how to convert a Cursor to this method's return type
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.

使用Room我得到了这个错误,我想找出是哪种方法导致的。

我有多个DAOs,总共大约有60个方法,这个错误只是在添加一个方法(复制

我可以发布整个类的DAOs,但是我需要一种方法来知道哪个方法失败了。我尝试了Run with--stackTraceRun with--info--debug选项,但是这些都没有显示任何有价值的信息。

我添加的方法是一个@QueryUPDATE,带有Int返回类型,如在留档中建议的那样

UPDATE或DELETE查询可以返回空或int。如果是int,则该值是受此查询影响的行数。

编辑:我想补充一点,我试图删除这个方法,使DAO回到工作状态,但它仍然给我这个错误。

EDIT2:添加渐变控制台输出,因为无法在注释中读取:

error: Not sure how to convert a Cursor to this method's return type
error: Not sure how to convert a Cursor to this method's return type
2 errors

:app:compileDebugJavaWithJavac FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

BUILD FAILED in 22s

共有3个答案

陶瀚玥
2023-03-14

对于登陆这里的任何人,使用协程Flow作为返回类型,如果不小心使函数挂起,就会得到这个错误,由于是返回流,所以没有必要挂起。

所以代替这个:

@Query("SELECT * FROM myTable WHERE id = :id")
suspend fun findById(id: Long): Flow<MyDataType>

使用此选项(不带挂起修改器):

@Query("SELECT * FROM myTable WHERE id = :id")
fun findById(id: Long): Flow<MyDataType> 
房学
2023-03-14

我花了一整天的时间在这个问题上。解决方案非常简单。我以前用过类似的东西

@Query("SELECT * FROM myTable")
fun getAll(): MutableLiveData<ArrayList<myData>>

现在当我把ArrayList改为List时

@Query("SELECT * FROM myTable")
fun getAll(): LiveData<List<myData>>

根据答案

希望这能帮助一些人几个小时。

常光明
2023-03-14

最近我遇到了同样的问题,但我在Dao函数中使用了Coroutines,例如:

@Query("SELECT * FROM Dummy")
suspend fun get(): LiveData<List<Dummy>>

无法编译,但在删除suspend后,一切正常。返回LiveData时不需要它suspendLiveData似乎无法协同工作(截至目前)。

 类似资料:
  • 我在这里看到了很多问题,但这些答案都没有解决我的问题。这是我的DAO: 我正试图得到一个包含在该类别中的食谱列表。我得到一个编译时错误,它说: C: 。。。\app\build\tmp\kapt3\stubs\debug\com\mitch\rcp\RecipeDAO。java:18:错误:不确定如何将游标转换为此方法的返回类型(void)。 但我的返回类型不是void?我不明白。

  • 我正在尝试将此对象保存在Room数据库中,我读到了Typconverters用于将复杂对象转换为一个可以存储在数据库中的文件。我收到这个错误:错误:不确定如何将光标转换为此方法的返回类型(androidx.lifecycle.LiveData 我的问题类别: 我的dao类: 我的数据库类: 我的转换器类别:

  • 我正在使用房间来建立简单的笔记应用程序。下面是我的note实体类: 我希望它会返回一个注释列表。但是我的应用程序崩溃了,这个错误消息显示“不确定如何将光标转换为该方法的返回类型”。

  • 我不明白,我以为这是获取新插入行的id的方法。 刀 实体 但是构建失败,我得到的错误是指向我的类,错误是: 错误:不确定如何处理插入方法的返回类型。 我错过了什么?

  • 我正在使用kotlin和room库开发一个android应用程序。当我试图获取插入项的id时,我得到了以下错误 不确定如何处理insert方法的返回类型。公共抽象java。lang.Object InsertReceive(@org.jetbrains.annotations.NotNull() 我尝试过其他类似的解决方案,但它不起作用 这是我的密码 收据kt 接收道。kt ReceiptRepo

  • 我想说得具体一点。我有一个名为Result的类和一个名为Result的派生类 这些类在方法中用作返回类型。为此,我创建了这个helper类: 正如您所看到的,上面的代码对于成功有两种返回类型,一种是如果您不想返回任何东西,另一种是如果您想返回一些东西,但是失败的结果永远不会返回什么东西。这是不必要的,只是一个错误消息。这使我想到以下问题:当我想创建一个可以使用返回类型返回Success,而不使用返