web-dev-qa-db-fra.com

ViewModel in Kotlin: Référence non résolue

J'essaie d'implémenter ViewModel dans une application 100% Kotlin. Chaque document que je peux trouver indique que je souhaite l'utiliser pour obtenir l'instance ViewModel:

ViewModelProviders.of(this).get(CustomViewModel::class.Java)

Selon la documentation, je devrais pouvoir importer ceci avec:

import Android.Arch.lifecycle.ViewModelProviders

Cette importation n'est toutefois pas résolue. J'utilise les éléments suivants dans mon fichier de construction:

def androidArchVersion = '1.1.1'
implementation "Android.Arch.lifecycle:viewmodel:$androidArchVersion"
implementation "Android.Arch.lifecycle:livedata:$androidArchVersion"
annotationProcessor "Android.Arch.lifecycler:compiler:$androidArchVersion"
testImplementation "Android.Arch.core:core-testing:$androidArchVersion"

Pourquoi ne puis-je pas accéder à ViewModelProviders?

8
RedBassett

Incluez les éléments suivants en tant que dépendance:

implementation "Android.Arch.lifecycle:extensions:1.1.1"

Cette dépendance concerne à la fois ViewModel et LiveData et ne nécessiterait donc pas que vous donniez des dépendances distinctes pour la même chose; c'est-à-dire que les deux premières dépendances indiquées par vous peuvent être remplacées par la dépendance aux extensions de cycle de vie susmentionnée. 

15
Supriya

En plus de ce que Sup suggéré, vous devrez corriger lifecycler:compiler en lifecycle:compiler - la synchronisation avec Gradle ne devrait même pas se terminer correctement avec cette faute de frappe.

Deuxièmement, le traitement d'annotation Android standard ("annotationProcessor") ne fonctionne pas vraiment avec Kotlin. Utilisez plutôt le kapt de Kotlin.

En haut de votre fichier build.gradle, ajoutez les éléments suivants:

apply plugin: 'kotlin-kapt'.

Et dans votre section Dépendances, remplacez les occurrences de annotationProcessor (comme ci-dessus) par kapt, par exemple.

kapt "Android.Arch.lifecycle:compiler:1.1.1"

2
Julian Os

J'ai rencontré ce genre de problème dans AndroidStudio 3.0.1 et résolu en ajoutant les dépendances suivantes dans le build.gradle approprié:

implementation "Android.Arch.lifecycle:extensions:1.1.1"
annotationProcessor "Android.Arch.lifecycle:compiler:1.1.1"

le code de version peut être différent d'AndroidStudio si cela diffère.

0
IP Kaal