139 votes

Impossible de résoudre le symbole ViewModelProviders sur AppCompatActivity

J'essaie de faire fonctionner mon ViewModel, mais sans succès jusqu'à présent. Android Studio affiche une erreur Cannot resolve symbol 'ViewModelProviders' .

Toutes les autres questions que j'ai trouvées sur ce sujet corrigeaient extends Activity à extends AppCompatActivity mais je suis en train d'étendre le bon. Je ne sais pas ce que je rate...
Mon code est basé sur Cette vidéo YouTube

MainActivity.java

public class MainActivity extends AppCompatActivity implements
    TileAdapter.TileAdapterOnClickHandler {

private BaseViewModel viewModel;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //set Toolbar
    Toolbar myToolbar = findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);

    //initialize viewModel
    viewModel = ViewModelProviders.of(this).get(BaseViewModel.class);

BaseViewModel.java

public class BaseViewModel extends ViewModel {

private Movie[] mMovie;

public void init (Movie[] movies){
    this.mMovie = movies;
}

public Movie[] getMovie() {
    return mMovie;
}

1 votes

"Impossible de résoudre le symbole" signifie que soit vous n'avez pas le symbole import ou vous le faites mais vous n'avez pas la dépendance dans votre configuration Gradle.

10 votes

Vérifiez si vous dépendez de Android.arch.lifecycle:extensions dans build.gradle

0 votes

Soit il utilise une bibliothèque et a ajouté la dépendance dans le fichier gradle pour pouvoir importer ViewModel, soit il a une classe personnalisée. ViewModel sous un autre paquet et il l'importe de là.

221voto

Sheler Points 3039

Je n'avais pas les deux dépendances dans mon build, d'où le problème.

implementation "android.arch.lifecycle:extensions:1.1.0"
implementation "android.arch.lifecycle:viewmodel:1.1.0"

Merci @Muthukrishnan Rajendran.

7 votes

@Sheler Votre réponse est correcte mais la documentation est fausse. Dans la documentation, il est spécifié que ViewModel et LiveDat sont tous deux dans l'implémentation "Android.arch.lifecycle:extensions:1.1.1".

2 votes

Hmm cette solution n'a toujours pas résolu mon problème. J'ai implémenté 'Android.arch.lifecycle:extensions:1.1.1' dans mon application gradle et allprojects { repositories { google() jcenter() } } Y a-t-il quelque chose d'autre à ajouter ?

1 votes

Je vois la classe ViewModelProvider mais elle ne possède pas la méthode .of(). ViewModelProviders n'est toujours pas défini. Je suis sur un Mac si cela compte.

112voto

Babao Points 721

Si vous utilisez androidx vous avez besoin de ça :

implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'

1 votes

Pour tous ceux qui rencontrent ce problème, vous avez également besoin de ceci dans votre app gradle : apply plugin : 'androidx.navigation.safeargs' et ceci dans votre gradle Android : classpath "Android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha06" Si vous avez des problèmes pour placer ces choses, regardez dans l'application de démonstration Android-sunflower de google.

2 votes

Vérifiez ce lien pour la dernière version d'androidx developer.Android.com/jetpack/androidx/migrate

1 votes

Quelle est la stupidité ? ViewModelProvider est disponible sans dépendance mais pour ViewModelProviders nous avons besoin d'une dépendance supplémentaire.

15voto

L-X Points 2203

Si vous utilisez la version 28 ou supérieure du sdk compilé, il vous suffit d'ajouter une seule dépendance pour obtenir ViewModel et LiveData

dependencies {
    //...
    def lifecycle_version = "1.1.1"

    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
}

0 votes

Pour connaître la dernière version du android.arch.lifecycle:extensions vous pouvez chercher extensions en maven.google.com/web/index.html et voir la dernière version

2 votes

androidx.lifecycle:lifecycle-extensions est déprécié developer.Android.com/jetpack/androidx/releases/lifecycle

5voto

Vous devez ajouter la bibliothèque dans le build.gradle de votre projet.

def lifecycle_version = "2.0.0"

// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"

5voto

shellhub Points 516

Je résous ce problème à partir de Documentation officielle d'Android . Ajouter ci-dessous pour build.grale

def lifecycle_version = "2.0.0"
// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X