Android kaptDebug Kotlin сбой + SQL ошибка или отсутствие базы данных (такой таблицы нет: встреча) - PullRequest
0 голосов
/ 19 июня 2020

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

C:\androidx\quickDoctor\app\build\tmp\kapt3\stubs\debug\com\example\quickdoctor\dao\AppointmentDao.java:11: error: There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (no such table: appointment)
    public abstract 

androidx.lifecycle.LiveData<java.util.List<com.example.quickdoctor.data.Appointment>> getAppointments(int idP);
                                                                                                          ^C:\androidx\quickDoctor\app\build\tmp\kapt3\stubs\debug\com\example\quickdoctor\dao\AppointmentDao.java:15: error: There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (no such table: appointment)
    public abstract java.util.List<com.example.quickdoctor.data.Appointment> getAll();
                                                                             ^C:\androidx\quickDoctor\app\build\tmp\kapt3\stubs\debug\com\example\quickdoctor\dao\AppointmentDao.java:19: error: There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (no such table: appointment)
    public abstract java.lang.Object deleteAll(@org.jetbrains.annotations.NotNull()
                                     ^C:\androidx\quickDoctor\app\build\tmp\kapt3\stubs\debug\com\example\quickdoctor\dao\AppointmentDao.java:24: error: com.example.quickdoctor.dao.AppointmentDao is part of com.example.quickdoctor.roomDb.Appointment2DB but this entity is not in the database. Maybe you forgot to add com.example.quickdoctor.data.Appointment to the entities section of the @Database?
    public abstract java.lang.Object insert(@org.jetbrains.annotations.NotNull()

Также этот:

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)

Я собираю, перестраиваю, очищаю свой проект, делаю недействительным кеш и перезапускаю, но ничего работал

Мой класс сущности:

@Entity(
    tableName = "appointment"
)
data class Appointment(
    @PrimaryKey
    @ColumnInfo(name = "id")
    val id:Int,
    @ColumnInfo(name = "nameDoctor")
    val nameDoctor: String,
    @ColumnInfo(name = "nameHospital")
    val nameHospital: String,
    @ColumnInfo(name = "idPacient")
    val idPacient: Int,
    @ColumnInfo(name = "date")
    val date: Date,
    @ColumnInfo(name = "hour")
    val hour: String,
    @ColumnInfo(name = "title")
    val title: String,
    @ColumnInfo(name = "info")
    val info: String)

Мой класс Dao:

@Dao
interface AppointmentDao {
    @Query("SELECT * FROM appointment WHERE idPacient =:idP order by date desc")
    fun getAppointments(idP: Int): LiveData<List<Appointment>>

    @Query("SELECT * FROM appointment")
    fun getAll(): List<Appointment>

    @Query("DELETE FROM appointment")
    suspend fun deleteAll()

    @Insert (onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert(app: Appointment)
}

Мой класс базы данных назначения

@Database(entities = [Appointment::class], version = 1, exportSchema = false)
@TypeConverters(Convertors::class)
abstract class AppointmentDatabase : RoomDatabase() {

    abstract fun appointmentDao(): AppointmentDao

    companion object {
        @Volatile
        private var INSTANCE: AppointmentDatabase? = null

        fun getDatabase(context: Context, scope: CoroutineScope): AppointmentDatabase {
            val inst = INSTANCE
            if (inst != null) {
                return inst
            }
            val instance =
                Room.databaseBuilder(
                    context.applicationContext,
                    AppointmentDatabase::class.java,
                    "app1_db"
                )
                    .addCallback(WordDatabaseCallback(scope))
                    .build()
            INSTANCE = instance
            return instance
        }

        private class WordDatabaseCallback(private val scope: CoroutineScope) :
            RoomDatabase.Callback() {

            override fun onOpen(db: SupportSQLiteDatabase) {
                super.onOpen(db)
                INSTANCE?.let { database ->
                    scope.launch(Dispatchers.IO) {
                        populateDatabase(database.appointmentDao())
                    }
                }
            }
        }

        suspend fun populateDatabase(bookDao: AppointmentDao) {
            bookDao.deleteAll()
        }
    }

}

и преобразователь class:

class Convertors {
@TypeConverter
fun fromTimestamp(value: Long?): Date? {
    return value?.let { Date(it) }
}

@TypeConverter
fun dateToTimestamp(date: Date?): Long? {
    return date?.time?.toLong()
}
}

Что я делаю не так?

...