无法在AppCompatActivity上解析符号ViewModelProviders

时间:2018-03-21 11:50:59

标签: android viewmodel android-architecture-components

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

我在此主题中发现的每个其他问题都在纠正extends Activityextends 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;
}

14 个答案:

答案 0 :(得分:151)

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

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

谢谢@Muthukrishnan Rajendran

答案 1 :(得分:41)

如果您使用的是androidx,则需要:

implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-rc01'

答案 2 :(得分:16)

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 :(得分:11)

如果您使用的是已编译的sdk 28版或更高版本,则只需添加一个依赖项即可获得ViewModelLiveData

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

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

答案 4 :(得分:5)

在我的情况下(Android Studio 3.6.3),请在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一起使用)

答案 5 :(得分:2)

在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

答案 6 :(得分:2)

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

def lifecycle_version =“ 2.0.0”

// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"

答案 7 :(得分:2)

在实现“ 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);

答案 8 :(得分:2)

-' ViewModelProviders '现在已弃用

  • 现在替代
  • 在Java中

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

  • 在科特林

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

参考- https://developer.android.com/reference/androidx/lifecycle/ViewModelProviders

答案 9 :(得分:1)

使用androix

更改

implementation 'com.android.support:appcompat-v7:28.0.0'

implementation 'androidx.appcompat:appcompat:1.1.0-alpha03'

您可以使用

Refactor>Migrate to AndroidX

答案 10 :(得分:1)

在我的应用程序中工作正常(java) 之前

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

更改为

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

希望它可以帮助

答案 11 :(得分:1)

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

**无法访问androidx.lifecycle。具有默认的viewmodelprovider工厂,该工厂是您的类名称的enter image description here子类,请检查您的模块类路径,检查您的模型是否有冲突的依赖项,**

我在 project 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 文件中,问题已解决。

答案 12 :(得分:0)

我从Android official documentation解决了这个问题。在下面添加到build.grale

def lifecycle_version = "2.0.0"
// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"

答案 13 :(得分:0)

我有同样的问题。其他解决方案都没有帮助我。

我意识到我使用的是import androidx.lifecycle.ViewModelProvider;而不是import androidx.lifecycle.ViewModelProviders;

因此,请确保您正在使用import androidx.lifecycle.ViewModelProviders;。即是ViewModelProviderss

相关问题