AppCompatActivityでシンボルViewModelProvidersを解決できません


122

ViewModelを機能させようとしていますが、今のところうまくいきません。Android Studioにエラーが表示されるCannot resolve symbol 'ViewModelProviders'

このトピックに関して私が見つけた他のすべての質問はに修正extends Activityすることでしたextends AppCompatActivityが、私は正しいものを拡張しています。何が欠けているかわからない...
コードはこのYouTubeビデオに基づいています

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

1
「シンボルを解決できません」とは、importステートメントがないか、あるがGradleのセットアップに依存関係がないことを意味します。
CommonsWare 2018年

9
build.gradleにandroid.arch.lifecycle:extensionsの依存関係があるかどうかを確認してください
Muthukrishnan Rajendran

ライブラリを使用してGradleファイルに依存関係を追加したため、ViewModelをインポートできるかViewModel、別のパッケージの下にカスタムクラスがあり、そこからインポートしています
Akshay Katariya

依存関係としての拡張子はありませんでした。おかげ@MuthukrishnanRajendran
Sheler

回答:


203

ビルドに両方の依存関係がなかったため、問題が発生しました。

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

ありがとう@Muthukrishnan Rajendran


7
@シェラー正解ですが、ドキュメントが間違っています。ドキュメントでは、ViewModelとLiveDatの両方が実装 "android.arch.lifecycle:extensions:1.1.1"にあることが明記されています
プリティッシュ

2
うーん、この解決策はまだ私の問題を解決していません。アプリグラドルとallprojects {リポジトリ{google()jcenter()}}に実装「android.arch.lifecycle:extensions:1.1.1」があります。他に何か追加する必要がありますか?
musterjunk

1
ViewModelProviderクラスはありますが、.of()メソッドがありません。ViewModelProvidersはまだ定義されていません。それが問題ならMacを使っています。
musterjunk

プロジェクトに追加する必要がある最小SDKまたはJava 8定義はありますか?
musterjunk

気にしないで。Gradleファイルが表示されない場合は、必ず同期してください。
musterjunk

96

使用し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デモアプリをご覧ください。
findusl 2018年


愚かさは何ですか!ViewModelProviderは依存関係なしで使用できますが、ViewModelProvidersには追加の依存関係が必要です。
Rahul Rastogi、

15

コンパイル済みのSDKバージョン28以降を使用している場合は、単一の依存関係を追加するだけで取得ViewModelおよびLiveData

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

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

最新バージョンを知るには、maven.google.com / web / index.htmlandroid.arch.lifecycle:extensions検索extensionsして最新バージョンを確認できます
Sanjeev

11

android.arch.lifecycle:extensionsは非推奨の使用法

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

次のように、viewmodelのインスタンスを作成します

ジャワ

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

コトリン

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

5

プロジェクトのbuild.gradleにライブラリを追加する必要があります

def lifecycle_version = "2.0.0"

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


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は不十分でした)


3

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"
...
}

build.gradleファイルのサンプル画像


2

androixライブラリを使用する

変化する

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

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

使用できます

Refactor>Migrate to AndroidX

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

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


1

以前は私のアプリ(java)で正常に動作します

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

に変更

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

それが役に立てば幸い


1

私の場合、私は以下の問題に直面しています:

** 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ファイルに追加すると、問題が解決します。


0

私も同じ問題を抱えていました。他の解決策はどれも私を助けませんでした。

import androidx.lifecycle.ViewModelProvider;代わりにを使用していることに気付きましたimport androidx.lifecycle.ViewModelProviders;

したがって、を使用していることを確認してくださいimport androidx.lifecycle.ViewModelProviders;。それはあるViewModelProviderss

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.