Dav*_*ini 30 android dao kapt android-room android-architecture-components
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.
Run Code Online (Sandbox Code Playgroud)
使用Room
我收到此错误,我想找出导致它的方法.
我有多个DAO
s,总共有大约60个方法,并且在添加方法之后弹出了这个错误(从另一个完美工作的复制和粘贴,只是将字段更改为设置).
我可以发布整个类的DAO
s,但我想知道哪种方法失败了.我试着用Run with --stacktrace
,Run with --info
和--debug option
,但这些都不显示出任何有价值的信息.
我添加的方法是一个@Query
UPDATE
与Int
返回类型,如在建议的文档
UPDATE或DELETE查询可以返回void或int.如果是int,则该值是受此查询影响的行数.
编辑:我想补充一点,我尝试删除该方法,使DAO回到工作状态,但它仍然给我这个错误.
EDIT2:添加gradle控制台输出,因为在评论中不可读:
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
Run Code Online (Sandbox Code Playgroud)
gMa*_*ale 38
对于登陆这里的任何人,使用协程 Flow作为返回类型,如果您不小心使函数挂起,您将收到此错误。由于它正在返回一个流,因此不需要暂停。
所以而不是这个:
@Query("SELECT * FROM myTable WHERE id = :id")
suspend fun findById(id: Long): Flow<MyDataType>
Run Code Online (Sandbox Code Playgroud)
使用这个(没有挂起修饰符):
@Query("SELECT * FROM myTable WHERE id = :id")
fun findById(id: Long): Flow<MyDataType>
Run Code Online (Sandbox Code Playgroud)
Ali*_*azi 33
是的,根据您在评论中提到的内容,您不能将返回类型更改List
为其中的任何其他内容Dao
.我假设Room不知道如何处理其他类型的返回.取出List
并将其转换/转换为您想要的类型Dao
.
aks*_*nge 15
我整天都在这个问题上。解决方案非常简单。我以前用过这样的东西
@Query("SELECT * FROM myTable")
fun getAll(): MutableLiveData<ArrayList<myData>>
Run Code Online (Sandbox Code Playgroud)
现在,当我将ArrayList更改为List并将MutableLiveData更改为LiveData时,它可以正常工作。
@Query("SELECT * FROM myTable")
fun getAll(): LiveData<List<myData>>
Run Code Online (Sandbox Code Playgroud)
根据对这个问题的答案和评论,我认为会议室仅支持List&LiveData,因为我也尝试了MutableLiveData和仅ArrayList。没有一种组合有效。
希望这对某人有帮助。
Mar*_*ouh 15
有一个与 Kotlin@Metadata
注释和 Room 读取方式的更改相关的问题,即使用不支持读取信息Room 2.4.2
的旧版本库,而在google 中更新了库。kotlinx-metadata-jvm
Kotlin 1.7.x
Room 2.5.0
要解决此问题,请通过将依赖项添加到注释处理器路径来强制升级依赖项,即kapt "org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.5.0"
如果您使用的是Room 2.4.x
.
或者你可以使用Room 2.5.0-alpha02
它来解决问题。
如果你只是想解决错误,请将其添加到 app/gradle 文件中
kapt "org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.5.0"
Run Code Online (Sandbox Code Playgroud)
或使用这些版本的房间Kotlin 1.7.x
implementation 'androidx.room:room-ktx:2.5.0-alpha02'
kapt 'androidx.room:room-compiler:2.5.0-alpha02'
Run Code Online (Sandbox Code Playgroud)
现在您可以毫无问题地将 Room 版本更新为Room 2.4.3
with 。Kotlin 1.7.10
Dan*_*mes 11
最近,我遇到了同样的问题,但是我Coroutines
在Dao
函数中使用了这样的东西:
@Query("SELECT * FROM Dummy")
suspend fun get: LiveData<List<Dummy>>
Run Code Online (Sandbox Code Playgroud)
并且无法编译,但是删除suspend
所有内容后一切正常。
@Query("select * from movie_action")
suspend fun getMovieActionRoom() : LiveData<List<MoviesActionModel>>
Run Code Online (Sandbox Code Playgroud)
只需删除挂起,在某些情况下错误就会消失。
小智 6
在我的情况下,当我LiveData<ArrayList<Example Class>>
在 Dao 类中使用从 Room 获取所有东西时,我遇到了这个问题, 当我更改ArrayList
为List
.
示例(科特林):
@Dao
interface ExampleDao {
@Query("SELECT * from example_table")
fun getAllExample():LiveData<List<Example>>
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18788 次 |
最近记录: |