J'utilise la bibliothèque Room et j'obtiens le message d'erreur suivant lorsque j'essaye de créer l'application:
e: [kapt] An exception occurred: Java.util.NoSuchElementException: Collection contains no element matching the predicate.
Voici un message d'erreur plus détaillé:
FAILURE: Build failed with an exception
* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> Compilation error. See log for more details
J'ai isolé le problème dans le code pour être quelque part dans ce qui suit, même si je ne sais pas exactement ce qui lève cette exception:
package com.example.pomoplay
import Android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
@Database(entities = [(Category::class)], version = 1)
abstract class PomoPlayDatabase: RoomDatabase() {
abstract fun categoryDao(): CategoryDao
companion object {
private var INSTANCE: PomoPlayDatabase? = null
internal fun getDatabase(context: Context): PomoPlayDatabase?
{
if (INSTANCE == null) {
synchronized(PomoPlayDatabase::class.Java) {
if (INSTANCE == null) {
INSTANCE =
Room.databaseBuilder<PomoPlayDatabase>(
context.applicationContext,
PomoPlayDatabase::class.Java,
"pomoplay_database").build()
}
}
}
return INSTANCE
}
}
}
Gradle.build - projet
buildscript {
ext.kotlin_version = '1.3.61'
repositories {
google()
jcenter()
}
dependencies {
classpath 'androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0'
classpath 'com.Android.tools.build:gradle:3.5.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Gradle.build - module
apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'
apply plugin: "androidx.navigation.safeargs.kotlin"
apply plugin: 'kotlin-kapt'
Android {
packagingOptions {
exclude 'META-INF/atomicfu.kotlin_module'
}
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.pomoplay"
minSdkVersion 23
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0'
implementation 'com.google.Android.material:material:1.0.0'
implementation 'androidx.navigation:navigation-fragment-ktx:2.1.0'
implementation 'androidx.navigation:navigation-ui-ktx:2.1.0'
//Room Components
implementation "androidx.room:room-runtime:2.2.3"
kapt "androidx.room:room-compiler:2.2.3"
//Testing Components
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
Dans mon cas, cela se produit quand ou parce que j'essaie de faire filtrer par un champ qui n'existe pas par exemple
éléments de classe (id: Int, nom: String, isNew: Boolean)
donc quand je filtre une liste d '"éléments" avec quelque chose comme ça
var list: Arraylist list.filter {it-> it.isNew} ... etc etc
si mon backend n'a pas o récupérer ce champ "isNew" mon code trow my that exceptions, c'est dans mon cas