Комната [исключение: KaptExecution] при использовании @Query в Dao

#android #kotlin #android-room

#Android #kotlin #android-комната

Вопрос:

По неизвестным мне причинам мое приложение не может быть создано, как только я добавляю @Query в свою комнату.

Я понял, что это был @Query, делая все шаг за шагом, и в итоге дошел до того, что добавил функцию @Query, что привело к ошибке.

Ошибка, которую я получаю,:

 FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
   > java.lang.reflect.InvocationTargetException (no error message)

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

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

BUILD FAILED in 1s
  

Вот мой код:

MainDatabase.kt

 import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import my.test.movieexpert.localdatasource.dao.PopularMovieDao
import my.test.movieexpert.profilescreen.model.PopularMovie

@Database(entities = [PopularMovie::class], version = 1, exportSchema = false)
abstract class MainDatabase : RoomDatabase() {

    abstract fun popularMovieDao(): PopularMovieDao

    companion object {
        @Volatile
        private var Instance: MainDatabase? = null

        fun getInstance(context: Context): MainDatabase {
            val tempInstance = Instance
            if (tempInstance != null) {
                return tempInstance
            }

            synchronized(this) {
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    MainDatabase::class.java,
                    "main_database"
                ).build()
                Instance = instance
                return instance
            }
        }
    }
}
  

PopularMovieDao.kt => Всякий раз, когда я раскомментирую какую-либо из функций @Query, мое приложение не создается

 import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query

@Dao
interface PopularMovieDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun addMovies(listOfMovies: List<PopularMovie>)

//    @Query("DELETE FROM PopularMovie")
//    suspend fun clearTable()

//    @Query("SELECT * FROM PopularMovie")
//    suspend fun getMovies(): List<PopularMovie>
}
  

PopularMovie.kt

 import androidx.room.Entity
import androidx.room.PrimaryKey
import com.squareup.moshi.Json

@Entity
data class PopularMovie(
    @field:Json(name = "id") val id: Int,
    @field:Json(name = "title") val title: String,
    @field:Json(name = "overview") val overview: String,
    @field:Json(name = "release_date") val release_date: String,
    @field:Json(name = "poster_path") val poster_path: String,
    @field:Json(name = "vote_average") val vote_average: String
) {
    @PrimaryKey(autoGenerate = true)
    var rowId: Int = 0
}
  

Комментарии:

1. ваша темпоральность избыточна. попробуйте @ColumnInfo(name = «id») для ваших полей сущности

2. @mohsen исправил темп. Добавлен @ ColumnInfo, но результата нет.

3. добавьте @ColumnInfo(name = «row_id») и для вашего идентификатора строки

4. оба запроса приводят к сбою или только один?

5. @mohsen Я также добавил «row_id». Любой из двух запросов завершается ошибкой

Ответ №1:

Обнаружена проблема.

В моем приложении build.gradle у меня было следующее:

 configurations.all() {
        resolutionStrategy.force "org.antlr:antlr4-runtime:4.5.3"
        resolutionStrategy.force "org.antlr:antlr4-tool:4.5.3"
    }
  

Я использовал это для ошибок совместимости между привязкой данных и Room в прошлом, и это больше не было нужно.