Android 无法解析AppCompatActivity上的符号ViewModelProviders

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

嘿,我正在尝试让我的ViewModel工作,但到目前为止运气不好。 Android Studio显示错误
无法解析符号“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'