Android 无法解析AppCompatActivity上的符号ViewModelProviders
嘿,我正在尝试让我的ViewModel工作,但到目前为止运气不好。 Android Studio显示错误Android 无法解析AppCompatActivity上的符号ViewModelProviders,android,viewmodel,android-architecture-components,Android,Viewmodel,Android Architecture Components,嘿,我正在尝试让我的ViewModel工作,但到目前为止运气不好。 Android Studio显示错误无法解析符号“ViewModelProviders” 我在这个主题上发现的每一个问题都是将扩展活动更正为扩展活动,但我扩展了正确的问题。不确定我错过了什么… 我的代码是基于 MainActivity.java public class MainActivity extends AppCompatActivity implements TileAdapter.TileAdapterOnC
无法解析符号“ViewModelProviders”
我在这个主题上发现的每一个问题都是将扩展活动
更正为扩展活动
,但我扩展了正确的问题。不确定我错过了什么…我的代码是基于 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;
}
我的构建中没有这两个依赖项,因此出现了问题
implementation "android.arch.lifecycle:extensions:1.1.0"
implementation "android.arch.lifecycle:viewmodel:1.1.0"
感谢@Muthukrishnan Rajendran在build.gradle文件中,将这些行添加到dependencies块中
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"
}
如果您使用的是
androidx
,则需要:
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
您应该在项目的build.gradle中添加库 def lifecycle_version=“2.0.0”
使用
androix
库
改变
implementation'com.android.support:appcompat-v7:28.0.0'
到
实现“androidx.appcompat:appcompat:1.1.0-alpha03”
你可以用
Refactor>Migrate to AndroidX
我从计算机上解决这个问题。将以下内容添加到build.grale
def lifecycle_version = "2.0.0"
// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
我也有同样的问题。其他的解决方案都帮不了我 我意识到我正在使用
导入androidx.lifecycle.ViewModelProvider代码>而不是导入androidx.lifecycle.ViewModelProviders代码>
因此,请确保您正在使用import androidx.lifecycle.ViewModelProviders代码>。也就是说,带有s
的ViewModelProviders
在我的应用程序(java)中运行良好
以前
loginViewModel=ViewModelProviders.of(这是新的LoginViewModelFactory())
.get(LoginViewModel.class);
更改为
loginViewModel=newviewmodelprovider(这是新的LoginViewModelFactory()).get(loginViewModel.class);
希望能有所帮助
lifecycle:不推荐使用扩展
创建viewmodel的实例,如下所示:
爪哇
科特林
就我而言,我面临以下问题,即:
**无法访问androidx.lifecycle。如果有默认的viewmodelprovider工厂,该工厂是类名的子类,请检查模块类路径检查模型冲突依赖项**
我在我的项目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'
(仅使用生命周期扩展是不够的)-“ViewModelProviders”现在已被弃用
- 现在选择
- 在爪哇
viewModel=ViewModelProvider(this.get)(BaseViewModel.class)代码>
- 在科特林
var viewModel=ViewModelProvider(this).get(BaseViewModel::class.java)
裁判-
“无法解析符号”表示您没有import
语句,或者你有,但你在Gradle设置中没有依赖项。检查你是否对android.arch.lifecycle:build.gradlee中的扩展有依赖项。他正在使用一些库并在Gradle文件中添加依赖项,以便能够导入ViewModel,或者他在不同的包下有自定义类ViewModel
,并且正在导入它没有作为依赖项的扩展。谢谢@MuthukrishnanRajendran@Sheler你的回答是正确的,但文件是错误的。在文档中指定ViewModel和LiveDat都在实现“android.arch.lifecycle:extensions:1.1.1”嗯,这个解决方案仍然没有解决我的问题。我在我的应用程序gradle和allprojects{repositories{google()jcenter()}中实现了“android.arch.lifecycle:extensions:1.1.1”。是否还需要添加其他内容?我看到了ViewModelProvider类,但它没有.of()方法。ViewModelProviders尚未定义。如果这很重要的话,我在mac上。有没有需要添加到项目中的min sdk或java 8定义?没关系。如果没有显示,请确保同步gradles文件。对于其他有此问题的人,您也需要在应用程序中使用此gradle:apply插件:'androidx.navigation.safeargs',并在android gradle:classpath“android.arch.navigation:navigation safe args gradle插件:1.0.0-alpha06”中使用此插件。如果您在放置这些东西时遇到问题,查看谷歌的android sunflower演示应用程序。查看此链接以了解最新的androidx版本有什么愚蠢之处!ViewModelProvider没有依赖项,但对于ViewModelProviders,我们需要额外的依赖项。要了解最新版本的android.arch.lifecycle:extensions
,您可以在中搜索extensions
,并查看最新版本
viewModel = ViewModelProvider(this).get(BaseViewModel::class.java);
viewModel = ViewModelProviders.of(this).get(BaseViewModel.class);
MyViewModel myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'