J'essaie d'écrire une application simple en utilisant Kotlin et Bibliothèque de persistance des pièces . J'ai suivi le tutoriel dans le codelab Android Persistence.
Voici mon AppDatabase
en Kotlin :
@Database(entities = arrayOf(User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userModel(): UserDao
companion object {
private var INSTANCE: AppDatabase? = null
@JvmStatic fun getInMemoryDatabase(context: Context): AppDatabase {
if (INSTANCE == null) {
INSTANCE = Room.inMemoryDatabaseBuilder(context.applicationContext, AppDatabase::class.java).allowMainThreadQueries().build()
}
return INSTANCE!!
}
@JvmStatic fun destroyInstance() {
INSTANCE = null
}
}
}
Mais lorsque j'ai essayé de lancer l'application, elle s'est immédiatement écrasée. Voici le journal du crash :
Caused by: java.lang.RuntimeException: cannot find implementation for com.ttp.kotlin.kotlinsample.room.AppDatabase. AppDatabase_Impl does not exist
at android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:90)
at android.arch.persistence.room.RoomDatabase$Builder.build(RoomDatabase.java:340)
at com.ttp.kotlin.kotlinsample.room.AppDatabase$Companion.getInMemoryDatabase(AppDatabase.kt:19)
at com.ttp.kotlin.kotlinsample.MainKotlinActivity.onCreate(MainKotlinActivity.kt:28)
at android.app.Activity.performCreate(Activity.java:6272)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
at android.app.ActivityThread.access$900(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
Il semble que la classe AppDatabase_Impl
n'était pas autogénéré. J'ai vérifié l'application java originale téléchargée depuis codelab et j'ai constaté que AppDatabase_Impl
était autogénéré.
Version de Kotlin : 1.1.2-3
Version de la chambre : 1.0.0-alpha1
Quelqu'un a-t-il de l'expérience dans ce domaine ?
Editar: Utilisation de kapt
résout mon problème. Dans mon cas, je dois remplacer annotationProcessor
con kapt
.
2 votes
Pouvez-vous poster votre build.gradle également ?
11 votes
Est-ce qu'il y a
apply plugin: 'kotlin-kapt'
ykapt "android.arch.persistence.room:compiler:1.0.0-alpha1"
dans votre module build.gradle ?1 votes
Merci. L'utilisation du plugin kapt résout mon problème.
0 votes
@ThanhPham j'ai le même problème mais l'ajout de kapt introduit quelques erreurs gradle, veuillez regarder ici. stackoverflow.com/questions/44142964/ . Pouvez-vous fournir votre fichier gradle ?
0 votes
@chandil03 Je vois que vous ajoutez simplement le kapt. Dans mon cas, je dois REPLACER l'annotationProcessor PAR le kapt.