无法在 AppCompatActivity 上解析符号 ViewModelProvider

嘿,我试着让我的 ViewModel 工作,但是到目前为止还没有运气。 Android Studio 显示错误 Cannot resolve symbol 'ViewModelProviders'

我在这个话题上发现的每一个其他问题都是将 extends Activity改成 extends AppCompatActivity,但是我正在扩展正确的问题。不知道我错过了什么。
我的代码基于 < a href = “ https://youtu.be/c9-057jC1ZA”rel = “ noReferrer”> This YouTube video

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

Java

public class BaseViewModel extends ViewModel {


private Movie[] mMovie;


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


public Movie[] getMovie() {
return mMovie;
}
80739 次浏览

在我的构建中没有两个依赖项,因此出现了问题。

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

谢谢@Muthukrishnan Rajendran

在 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或更高版本,您只需要添加单个依赖项就可以得到 ViewModelLiveData

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


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

如果你正在使用 androidx,你需要这样做:

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

您应该在项目的 build.gradle 中添加库

Def 生命周期 _ 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;,即 ViewModelProviderss

在我的应用程序(java)中运行良好 之前

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

更改为

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

希望能有所帮助

生命周期: 不推荐使用扩展

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

像这样创建视图模型的 例子:

爪哇咖啡

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

科特林

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

就我而言,我面临以下问题:

无法访问 androidx.lificycle.has 一个默认的 viewmodel 提供者工厂,它是你的类 Name 的一个 < img src = “ https://i.stack.imgur.com/y0XaX.png”alt = “ enter image description here”> < img src = “ https://i.stack.imgur.com/y0XaX.png”alt = “ enter image description here”> 子类,检查你的模块类路径检查你的模型相互冲突的依赖关系

我在 项目建设,分级中添加了以下依赖项。

def lifecycle_version = "2.2.0"


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


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

然后,我在一个模块项目中创建我的类,我面临这个问题,然后我在 模块建造,级别文件中添加这些库,这个问题就解决了。

在实现中,“ androidx.life cycle: life cycle- 插件: 2.2.0”和上面的 ViewModelProvider 都不被推荐,可以使用

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

或者在 Kotlin

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是不够的)

更新

似乎您不再需要包含 gradle 实现行('androidx.lifecycle:lifecycle-extensions:2.2.0')来实例化 ViewModelProvider

- “ ViewModelProvider”现在是 不赞成

  • 现在换一个
  • 在爪哇

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

  • 在 Kotlin

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

裁判 Https://developer.android.com/reference/androidx/lifecycle/viewmodelproviders