Cannot resolve symbol ViewModelProviders on AppCompatActivity

AndroidViewmodelAndroid Architecture-Components

Android Problem Overview


Hey I'm trying to get my ViewModel working, but no luck so far. Android Studio shows error Cannot resolve symbol 'ViewModelProviders'.

Every other question I found on this topic was correcting extends Activity to extends AppCompatActivity, but I am extending the right one. Not sure what I'm missing...
My code is based on This YouTube video

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;
}

Android Solutions


Solution 1 - Android

I didn't have both dependencies in my build, hence the problem.

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

Thanks @Muthukrishnan Rajendran

Solution 2 - Android

If you are using androidx you need this:

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

Solution 3 - Android

> android.arch.lifecycle:extensions is deprecated use

def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"

Create instance of viewmodel like this:

> Java

Yourclass obj = new ViewModelProvider(context).get(ClassViewModel.class);

> Kotlin

var obj = ViewModelProvider(context).get(ClassViewModel::class.java)

Solution 4 - Android

If you are using compiled sdk version 28 or higher you only need to add single dependecy to get ViewModel and LiveData

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

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

Solution 5 - Android

In my case (Android Studio 3.6.3 ~ 4.1.2), in AppCompatActivity to successfully do:

MyViewModel myViewModel = new ViewModelProvider(this).get(MyViewModel.class);

it requires both of these:

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'

(alone with lifecycle-extentions is not sufficient)

Update

It seems that you have no longer to include the gradle implementation line ('androidx.lifecycle:lifecycle-extensions:2.2.0') to instantiate ViewModelProvider.

Solution 6 - Android

you should add library in your project's build.gradle

def lifecycle_version = "2.0.0"

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

Solution 7 - Android

I solve this problem from Android official documentation. Add below to build.grale

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

Solution 8 - Android

In the build.gradle file, add these lines in the dependencies block

dependencies {
...
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
//if not using java 8,use the following line
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version"
//if using java 8,ignore above line and add the following line
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
...
}

Sample Image of build.gradle file

Solution 9 - Android

-'ViewModelProviders' is deprecated now

  • Now alternative

> * In java

viewModel = ViewModelProvider(this).get(BaseViewModel.class);

> * In kotlin

var viewModel = ViewModelProvider(this).get(BaseViewModel::class.java)

Refs - https://developer.android.com/reference/androidx/lifecycle/ViewModelProviders

Solution 10 - Android

Use androix libraries

Change

implementation 'com.android.support:appcompat-v7:28.0.0'

to

implementation 'androidx.appcompat:appcompat:1.1.0-alpha03'

You can use

Refactor>Migrate to AndroidX

Solution 11 - Android

In My Case, I am facing below issue i.e:

> ** cannot access androidx.lifecycle.has a default viewmodelprovider factory which is a enter image description heresubclass of your class Name, check your module classpath check your model conflicting dependencies **

I added below dependencies in my project build.gradle.

def lifecycle_version = "2.2.0"

implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"

implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"

Then I create my class in a module project and I'm facing this issue, then I add these libraries in module build.gradle file and the issue is resolved.

Solution 12 - Android

In implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" and up ViewModelProviders is deprecated,use

viewModel = ViewModelProvider(this).get(BaseViewModel.class);

or in Kotlin

viewModel = ViewModelProvider(this).get(BaseViewModel::class.java);

instead of

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

Solution 13 - Android

Works fine in my app(java) before

loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory())
                .get(LoginViewModel.class);

changes to

loginViewModel = new ViewModelProvider(this,new LoginViewModelFactory()).get(LoginViewModel.class);

hope it could help

Solution 14 - Android

I had the same problem. None of the other solutions helped me.

I realized that I was using import androidx.lifecycle.ViewModelProvider; instead of import androidx.lifecycle.ViewModelProviders;.

So make sure you are using import androidx.lifecycle.ViewModelProviders;. That is ViewModelProviders with an s.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionShelerView Question on Stackoverflow
Solution 1 - AndroidShelerView Answer on Stackoverflow
Solution 2 - AndroidBabaoView Answer on Stackoverflow
Solution 3 - AndroidSumit ShuklaView Answer on Stackoverflow
Solution 4 - AndroidSanjeevView Answer on Stackoverflow
Solution 5 - AndroidhataView Answer on Stackoverflow
Solution 6 - AndroidFatih ÇakıroğluView Answer on Stackoverflow
Solution 7 - AndroidduyuanchaoView Answer on Stackoverflow
Solution 8 - AndroidSulav TimsinaView Answer on Stackoverflow
Solution 9 - AndroidaksBDView Answer on Stackoverflow
Solution 10 - AndroidSebastian DuranView Answer on Stackoverflow
Solution 11 - AndroidZeeshan AkhtarView Answer on Stackoverflow
Solution 12 - AndroidMihaiView Answer on Stackoverflow
Solution 13 - Androids wangView Answer on Stackoverflow
Solution 14 - AndroidSedJ601View Answer on Stackoverflow