Ошибка при использовании приостановки с помощью методов DAO

#android #kotlin #android-room #kotlin-coroutines

#Android #котлин #android-комната #котлин-сопрограммы

Вопрос:

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

Пожалуйста, помогите мне с этим.

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

(1)

 error: Type of the parameter must be a class annotated with @Entity or a collection/array of it. kotlin.coroutines.Continuationlt;? super kotlin.Unitgt; continuation);  

(2)

 error: Not sure how to handle insert method's return type. public abstract java.lang.Object addTransaction(@org.jetbrains.annotations.NotNull()  

(3)

 error: Not sure how to handle delete method's return type. Currently the supported  return types are void, int or Int. public abstract java.lang.Object deleteTransaction(@org.jetbrains.annotations.NotNull()  

(4)

 error: Type of the parameter must be a class annotated with @Entity or a  collection/array of it. kotlin.coroutines.Continuationlt;? super kotlin.Unitgt; continuation);  

(5)

 Execution failed for task ':app:kaptDebugKotlin'. gt; A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction  gt; java.lang.reflect.InvocationTargetException (no error message)  

Это ошибка компиляции, которую я получаю при сборке:-

введите описание изображения здесь

Класс DAO:-

 package com.tallileo.myapplication.TransactionDatabase  import androidx.lifecycle.LiveData import androidx.room.*   @Dao  interface TransactionDao {  @Insert(onConflict = OnConflictStrategy.IGNORE)  suspend fun addTransaction(transaction:Transaction)   @Delete  suspend fun deleteTransaction(transaction:Transaction)   @Query("SELECT * FROM transactions ORDER BY id DESC")  fun getAllTransaction():LiveDatalt;Listlt;Transactiongt;gt; }  

Entity Class

 package com.tallileo.myapplication.TransactionDatabase  import androidx.room.Entity import androidx.room.PrimaryKey  @Entity(tableName = "transactions") data class Transaction(  val transactionType:String,  val amountType:String,  val name:String,  val amount:String,  val accountTo:String,  val accountFrom:String,  val categoryType:String,  val currency:String,  var additionalNote:String=""  ) {  @PrimaryKey(autoGenerate = true)  var id:Int=0  }  

Database Class

 package com.tallileo.myapplication.TransactionDatabase  import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase  @Database(entities = [Transaction::class], version = 1, exportSchema = true) abstract class TransactionDatabase : RoomDatabase() {   abstract fun transactDao():TransactionDao   companion object {  // Singleton prevents multiple instances of database opening at the  // same time.  @Volatile  private var INSTANCE: TransactionDatabase? = null   fun getDatabase(context: Context): TransactionDatabase {  // if the INSTANCE is not null, then return it,  // if it is, then create the database  return INSTANCE ?: synchronized(this) {  val instance = Room.databaseBuilder(  context.applicationContext,  TransactionDatabase::class.java,  "TransactionDatabase"  ).build()  INSTANCE = instance  // return instance  instance  }  }  } }  

Мой класс сборки

 plugins {  id 'com.android.application'  id 'kotlin-android'  id 'kotlin-kapt' }  android {  compileSdk 31   defaultConfig {  applicationId "com.tallileo.myapplication"  minSdk 21  targetSdk 31  versionCode 1  versionName "1.0"   testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"  }   buildTypes {  release {  minifyEnabled false  proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'  }  }  compileOptions {  sourceCompatibility JavaVersion.VERSION_1_8  targetCompatibility JavaVersion.VERSION_1_8  }  kotlinOptions {  jvmTarget = '1.8'  }  buildFeatures {  viewBinding true  } }  dependencies {  def roomVersion = "2.3.0"   implementation 'androidx.core:core-ktx:1.7.0'  implementation 'androidx.appcompat:appcompat:1.4.0'  implementation 'com.google.android.material:material:1.4.0'  implementation 'androidx.constraintlayout:constraintlayout:2.1.2'  implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.0'  implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'  implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'  implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'  implementation 'androidx.legacy:legacy-support-v4:1.0.0'  testImplementation 'junit:junit:'  androidTestImplementation 'androidx.test.ext:junit:1.1.3'  androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'   //Lottie Animation  implementation 'com.airbnb.android:lottie:3.4.0'   //room components  implementation("androidx.room:room-runtime:$roomVersion")  kapt("androidx.room:room-compiler:$roomVersion")  implementation 'androidx.room:room-common:2.3.0'  implementation("androidx.room:room-ktx:$roomVersion") }  

Моя версия kotlin 1.6.0. Также, когда я удаляю приостановку из всех методов в DAO, ошибки компиляции не возникает.

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

1. Очень странно, я взял все ваши файлы, которые вы опубликовали, и проект отлично работает для меня, вы пробовали аннулировать кэш и перезапустить Android studio?

2. Да, я пытался аннулировать и перезапустить. Но, похоже, это проблема с Android studio. Я думаю, что мне нужно переустановить его.

3. @SarthakKumar попробуйте добавить это в свои зависимости: implementation "androidx.room:room-coroutines:$roomVersion"

4. Ранее я использовал эту зависимость, но она у меня не работала. В документации зависимость, используемая для использования сопрограмм с комнатой, такова: реализация(«androidx.room:room-ktx:$roomVersion»). Поэтому я удалил другое отделение и добавил это.

5. Какую версию Android Studio вы установили?