Fan*_*dez 2 android android-room remote-mediator
我正在遵循有关 RemoteMediator 的教程database.withTransaction{},一切都很好,直到我在使用允许数据库操作时遇到奇怪的错误。
不幸的是,IDE 似乎没有(或拒绝)识别这个非常真实和合法的块。我已检查是否正确定义了 ROOM 数据库抽象类,并在 build.gradle(app) 文件中声明了这些 ROOM 和 Paging 3 库。
// Room
implementation "androidx.room:room-runtime:2.4.3"
kapt "androidx.room:room-compiler:2.4.3"
// Room-paging artifact
implementation 'androidx.room:room-paging:2.4.3'
// Paging 3.0
implementation 'androidx.paging:paging-compose:1.0.0-alpha16'
Run Code Online (Sandbox Code Playgroud)
因此,我决定忽略该错误并继续调用块dao内的函数withTransaction{},但我得到Suspension functions can be call only inside a coroutine body。
这有点令人困惑,因为 RemoteMediator 的load()覆盖函数已经是一个挂起函数。
任何对这个问题有见解的人请帮忙,因为我似乎没有解决这个问题。
感谢上面的@ianhanniballake节省时间的评论,如果您遇到这种情况,只需将房间运行时风格更改为:
implementation "androidx.room:room-runtime:2.4.3"
kapt "androidx.room:room-compiler:2.4.3"
Run Code Online (Sandbox Code Playgroud)
room -ktx风格:
implementation "androidx.room:room-ktx:2.4.3"
kapt "androidx.room:room-compiler:2.4.3"
Run Code Online (Sandbox Code Playgroud)
根据开发人员文档, ktx-libs 提供 Kotlin 扩展和协程支持,这正是 block 的含义database.withTransaction{}- 它是 RoomDatabase 上的扩展函数,如源代码中的这一行所示。
public suspend fun <R> RoomDatabase.withTransaction(block: suspend () -> R): R {
Run Code Online (Sandbox Code Playgroud)
Android KTX 是一组 Kotlin 扩展,包含在 Android Jetpack 和其他 Android 库中。KTX 扩展为 Jetpack、Android 平台和其他 API 提供简洁、惯用的 Kotlin。为此,这些扩展利用了多项 Kotlin 语言功能,包括以下功能:
- 扩展功能
- 扩展属性
- 拉姆达斯
- 命名参数
- 参数默认值
- 协程
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |