I am following this tutorial about RemoteMediator and everything is fine until I run into a weird error when using database.withTransaction{}
to allow database operations.
Unfortunately, the IDE doesn't seem (or is refusing) to recognize this very genuine and legit block. I have checked that I defined ROOM Database abstract class correctly and declared these ROOM and Paging 3 libs in build.gradle(app) file.
// 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'
So I decided to ignore the error and went ahead to call a dao
function inside the withTransaction{}
block but I get Suspension functions can be called only within a coroutine body.
This is a bit confusing since RemoteMediator's load()
override function is already a suspend function.
Anyone with insights on this issue please help as I don't seem to be getting anywhere around this.
Thanks to @ianhanniballake day-saving comment above, if you run into this situation just change the room-runtime flavor from:
to room-ktx flavor:
As per Developers Docs ktx-libs provide Kotlin Extensions and Coroutines support which is exactly what
database.withTransaction{}
block is - it is an extension function on RoomDatabase as shown on this line from the source code.