Привет, я пытаюсь заставить мою 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;
}
Проверьте, есть ли у вас зависимость для android.arch.lifecycle: расширения в build.gradle
Либо он использует какую-то библиотеку и добавил зависимость в файл gradle, чтобы он мог импортировать ViewModel, либо у него есть собственный класс ViewModel в другом пакете, и он импортирует его оттуда
Не было расширений как зависимости. Спасибо @MuthukrishnanRajendran
В моей сборке не было обеих зависимостей, отсюда и проблема.
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".
Хм, это решение все еще не решило мою проблему. У меня есть реализация android.arch.lifecycle: extensions: 1.1.1 в моем приложении gradle и allprojects {repositories {google () jcenter ()}} Есть ли что-то еще, что нужно добавить?
Я вижу класс ViewModelProvider, но у него нет метода .of (). ViewModelProviders все еще не определен. Я использую Mac, если это важно.
Есть ли определение min sdk или java 8, которое нужно добавить в проект?
Неважно. Убедитесь, что вы синхронизируете файлы градиентов, если они не отображаются.
@ Шелер. У меня не работает. Кстати, в моих файлах gradle есть эта библиотека поддержки: com.android.support:appcompat-v7:27.1.1. Это влияет?
@musterjunk это для ViewModelProvider, а не ViewModelProvider
В файле 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"
...
}
Если вы используете скомпилированный 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 и увидеть последнюю версию
Если вы используете 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.
проверьте эту ссылку на наличие последней версии androidx developer.android.com/jetpack/androidx/migrate
Что за глупость! ViewModelProvider доступен без зависимости, но для ViewModelProvider нам нужна дополнительная зависимость.
вы должны добавить библиотеку в свой проект 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
«Невозможно разрешить символ» означает, что либо у вас нет оператора
import, либо он есть, но у вас нет зависимости в вашей настройке Gradle.