Query method parameters should either be a type that can be converted into a database column or a List

1.問題

Android Studioでアプリをビルドすると、 Query method parameters should either be a type that can be converted into a database column or a List~ エラーでコンパイルが失敗しました。

../app/build/tmp/kapt3/stubs/debug/com/example/memorynotes/framework/db/NoteDao.java:18:
error: Query method parameters should either be a type that can be converted into a database column or
a List / Array contains such type. You can consider adding a Type Adapter for this.
    kotlin.coroutines.Continuation<? super com.example.memorynotes.framework.db.NoteEntity> continuation);
                                                                                            ^

コンパイルエラーが発生したのはRoomのDAOですが、文法的な面でコードが間違った部分はないようです。

@Dao
interface NoteDao {
    @Insert(onConflict = REPLACE)
    suspend fun addNoteEntity(noteEntity: NoteEntity)

    @Query("SELECT * FROM note WHERE id = :id")
    suspend fun getNoteEntity(id: Long): NoteEntity?

    @Query("SELECT * FROM note")
    suspend fun getAllNoteEntities(): List<NoteEntity>

    @Delete
    suspend fun deleteNoteEntity(noteEntity: NoteEntity)
}

2.解決

問題の原因は、プロジェクトのGradleに宣言された「Room 2.2.2」バージョンが他の依存関係と競合してエラーが発生したようです。

dependencies {
    implementation "androidx.room:room-runtime:2.2.2"
    kapt "androidx.room:room-compiler:2.2.2"
    implementation "androidx.room:room-ktx:2.2.2"

以下のように、現在最新バージョンの「2.4.1」バージョンに変更したところ、ビルドが成功しました。

dependencies {
    implementation "androidx.room:room-runtime:2.4.1"
    kapt "androidx.room:room-compiler:2.4.1"
    implementation "androidx.room:room-ktx:2.4.1"

References

codechachaCopyright ©2019 codechacha