无法解析 AppCompatActivity 上的符号 ViewModelProviders
Posted
技术标签:
【中文标题】无法解析 AppCompatActivity 上的符号 ViewModelProviders【英文标题】:Cannot resolve symbol ViewModelProviders on AppCompatActivity 【发布时间】:2018-08-30 12:44:09 【问题描述】:嘿,我正在尝试让我的 ViewModel 正常工作,但到目前为止还没有运气。
android Studio 显示错误 Cannot resolve symbol 'ViewModelProviders'
。
我在该主题上发现的所有其他问题都将extends Activity
更正为extends AppCompatActivity
,但我正在扩展正确的问题。不知道我错过了什么......
我的代码基于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;
【问题讨论】:
“无法解析符号”表示您没有import
语句,或者您有但您的 Gradle 设置中没有依赖项。
检查 build.gradle 中是否有 android.arch.lifecycle:extensions 的依赖
要么他正在使用一些库并在 gradle 文件中添加了依赖项,因此他能够导入 ViewModel,要么他在不同的包下有自定义类 ViewModel
,他正在从那里导入它
没有扩展作为依赖。谢谢@MuthukrishnanRajendran
【参考方案1】:
在我的情况下(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
了。
【讨论】:
androidx.lifecycle:lifecycle-extensions
已弃用 developer.android.com/jetpack/androidx/releases/lifecycle【参考方案2】:
android.arch.lifecycle:extensions 已弃用
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);
科特林
var obj = ViewModelProvider(context).get(ClassViewModel::class.java)
【讨论】:
【参考方案3】:-'ViewModelProviders' 现已弃用
现在替代在 java 中
viewModel = ViewModelProvider(this).get(BaseViewModel.class);
在 kotlin 中
var viewModel = ViewModelProvider(this).get(BaseViewModel::class.java)
参考 - https://developer.android.com/reference/androidx/lifecycle/ViewModelProviders
【讨论】:
【参考方案4】:在实现“androidx.lifecycle:lifecycle-extensions:2.2.0”及以上 ViewModelProviders 已被弃用,使用
viewModel = ViewModelProvider(this).get(BaseViewModel.class);
或者在 Kotlin 中
viewModel = ViewModelProvider(this).get(BaseViewModel::class.java);
而不是
viewModel = ViewModelProviders.of(this).get(BaseViewModel.class);
【讨论】:
【参考方案5】:在我的情况下,我面临以下问题,即:
** 无法访问 androidx.lifecycle.has 默认 viewmodelprovider 工厂,它是您的类名称的 subclass,检查您的模块类路径检查您的模型冲突依赖项**
我在我的项目 build.gradle 中添加了以下依赖项。
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
然后我在一个模块项目中创建我的类,我遇到了这个问题,然后我将这些库添加到 module build.gradle 文件中,问题就解决了。
【讨论】:
【参考方案6】:在我的应用程序(java)中运行良好 之前
loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory())
.get(LoginViewModel.class);
更改为
loginViewModel = new ViewModelProvider(this,new LoginViewModelFactory()).get(LoginViewModel.class);
希望对你有帮助
【讨论】:
【参考方案7】:我遇到了同样的问题。其他解决方案都没有帮助我。
我意识到我使用的是import androidx.lifecycle.ViewModelProvider;
而不是import androidx.lifecycle.ViewModelProviders;
。
所以请确保您使用的是import androidx.lifecycle.ViewModelProviders;
。那是ViewModelProviders
和s
。
【讨论】:
【参考方案8】:如果你使用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" 如果您不知道将这些东西放在哪里,请查看 google 的 android-sunflower 演示应用程序。 查看此链接以获取最新的androidx版本developer.android.com/jetpack/androidx/migrate 有什么愚蠢的! ViewModelProvider 无需依赖即可使用,但对于 ViewModelProviders,我们需要额外的依赖。【参考方案9】:我从Android official documentation 解决了这个问题。在下面添加到build.grale
def lifecycle_version = "2.0.0"
// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
【讨论】:
【参考方案10】:使用androix
库
改变
implementation 'com.android.support:appcompat-v7:28.0.0'
到
implementation 'androidx.appcompat:appcompat:1.1.0-alpha03'
你可以使用
Refactor>Migrate to AndroidX
【讨论】:
【参考方案11】:您应该在项目的 build.gradle 中添加库
def 生命周期版本 = "2.0.0"
// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
【讨论】:
【参考方案12】:如果您使用的是已编译的 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
的最新版本,您可以在maven.google.com/web/index.html 中搜索extensions
并查看最新版本
androidx.lifecycle:lifecycle-extensions
已弃用 developer.android.com/jetpack/androidx/releases/lifecycle【参考方案13】:
在 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"
...
【讨论】:
【参考方案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” 嗯,这个解决方案仍然没有解决我的问题。我在我的应用程序 gradle 和 allprojects repositories google() jcenter() 中实现了 'android.arch.lifecycle:extensions:1.1.1' 是否还有其他需要添加的内容? 我看到 ViewModelProvider 类,但它没有 .of() 方法。 ViewModelProviders 仍未定义。如果这很重要,我在 Mac 上。 项目中是否需要添加 min sdk 或 java 8 定义? 没关系。如果 gradles 文件没有显示,请确保同步它。以上是关于无法解析 AppCompatActivity 上的符号 ViewModelProviders的主要内容,如果未能解决你的问题,请参考以下文章
无法解析符号 AppCompatActivity - 无法识别支持 v7 库?
AppCompatActivity 中未解析的 Android Activity Results API 引用
无法解析 style.xml 中的符号“主题”(Android Studio)
Hilt :- 无法在 AppCompatActivity 中使用 @AndroidEntryPoint 获取 DefaultViewModelFactories 异常?