Не удается разрешить символ ViewModelProviders в AppCompatActivity

Привет, я пытаюсь заставить мою ViewModel работать, но пока безуспешно. Android Studio показывает ошибку Cannot resolve symbol 'ViewModelProviders'.

Все остальные вопросы, которые я задавал по этой теме, касались исправления extends Activity на extends AppCompatActivity, но я расширяю правильный. Не уверен, что мне не хватает ...
Мой код основан на Это видео на 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;
}

«Невозможно разрешить символ» означает, что либо у вас нет оператора import, либо он есть, но у вас нет зависимости в вашей настройке Gradle.

CommonsWare 21.03.2018 12:52

Проверьте, есть ли у вас зависимость для android.arch.lifecycle: расширения в build.gradle

Muthukrishnan Rajendran 21.03.2018 12:52

Либо он использует какую-то библиотеку и добавил зависимость в файл gradle, чтобы он мог импортировать ViewModel, либо у него есть собственный класс ViewModel в другом пакете, и он импортирует его оттуда

Akshay Katariya 21.03.2018 12:54

Не было расширений как зависимости. Спасибо @MuthukrishnanRajendran

Sheler 21.03.2018 14:08
127
4
64 790
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

Ответ принят как подходящий

В моей сборке не было обеих зависимостей, отсюда и проблема.

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

Спасибо @Muthukrishnan Rajendran

@Sheler Вы ответили правильно, но документы неверны. В документации указано, что и ViewModel, и LiveDat находятся в реализации "android.arch.lifecycle: extensions: 1.1.1".

Pritish 08.05.2018 13:16

Хм, это решение все еще не решило мою проблему. У меня есть реализация android.arch.lifecycle: extensions: 1.1.1 в моем приложении gradle и allprojects {repositories {google () jcenter ()}} Есть ли что-то еще, что нужно добавить?

musterjunk 26.06.2018 17:03

Я вижу класс ViewModelProvider, но у него нет метода .of (). ViewModelProviders все еще не определен. Я использую Mac, если это важно.

musterjunk 26.06.2018 17:06

Есть ли определение min sdk или java 8, которое нужно добавить в проект?

musterjunk 26.06.2018 17:14

Неважно. Убедитесь, что вы синхронизируете файлы градиентов, если они не отображаются.

musterjunk 26.06.2018 17:43

@ Шелер. У меня не работает. Кстати, в моих файлах gradle есть эта библиотека поддержки: com.android.support:appcompat-v7:27.1.1. Это влияет?

zulkarnain shah 03.08.2018 09:17

@musterjunk это для ViewModelProvider, а не ViewModelProvider

Meysam Hadigheh 26.03.2020 21:55

В файле build.gradle добавьте эти строки в блок зависимостей

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

Если вы используете скомпилированный SDK версии 28 или выше, вам нужно только добавить одну зависимость, чтобы получить ViewModel и LiveData.

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

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

Чтобы узнать последнюю версию android.arch.lifecycle:extensions, вы можете найти extensions в maven.google.com/web/index.html и увидеть последнюю версию

Sanjeev 08.10.2019 08:33

Если вы используете androidx, вам понадобится следующее:

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

Для всех, у кого есть эта проблема, вам также понадобится это в вашем приложении gradle: apply plugin: 'androidx.navigation.safeargs' и это в вашем android gradle: classpath "android.arch.navigation: navigation-safe-args-gradle-plugin : ‌ 1.0.0-alpha06 "Если у вас возникли проблемы с тем, куда поставить эти вещи, поищите в демо-приложении android-sunflower от Google.

findusl 24.10.2018 19:34

проверьте эту ссылку на наличие последней версии androidx developer.android.com/jetpack/androidx/migrate

user2301281 10.02.2019 08:12

Что за глупость! ViewModelProvider доступен без зависимости, но для ViewModelProvider нам нужна дополнительная зависимость.

Rahul Rastogi 28.10.2019 08:15

вы должны добавить библиотеку в свой проект build.gradle

def lifecycle_version = "2.0.0"

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

Используйте библиотеки androix

Изменять

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

к

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

Ты можешь использовать

Refactor>Migrate to AndroidX

Решаю эту проблему от Официальная документация Android. Добавьте ниже в build.grale

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

У меня такая же проблема. Ни одно другое решение мне не помогло.

Я понял, что использую import androidx.lifecycle.ViewModelProvider; вместо import androidx.lifecycle.ViewModelProviders;.

Поэтому убедитесь, что вы используете import androidx.lifecycle.ViewModelProviders;. То есть ViewModelProviders с s.

Прекрасно работает в моем приложении (java) перед

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

изменения к

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

надеюсь, что это может помочь

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"

Создайте пример модели просмотра следующим образом:

Java

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

Kotlin

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

В моем случае я столкнулся с проблемой ниже, а именно:

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

Я добавил ниже зависимости в свой проект build.gradle.

def lifecycle_version = "2.2.0"

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

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

Затем я создаю свой класс в проекте модуля и сталкиваюсь с этой проблемой, затем добавляю эти библиотеки в файл модуль build.gradle, и проблема решается.

В реализации "androidx.lifecycle: lifecycle-extensions: 2.2.0" и выше ViewModelProviders устарела, используйте

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

или в Котлине

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

вместо

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

В моем случае (Android Studio 3.6.3 ~ 4.1.2) в AppCompatActivity для успешного выполнения:

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

это требует обоих:

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

(одного с lifecycle-extentions недостаточно)

-'ViewModelProviders 'сейчас устарел

  • Теперь альтернатива
  • In java

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

  • In kotlin

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

Ссылки - https://developer.android.com/reference/androidx/lifecycle/ViewModelProviders

Другие вопросы по теме