AppCompatActivity에서 기호 ViewModelProviders를 확인할 수 없습니다.


122

안녕하세요, ViewModel이 작동하도록 노력하고 있지만 지금까지는 운이 없습니다. Android Studio에 오류가 표시 Cannot resolve symbol 'ViewModelProviders'됩니다.

나는이 주제에 발견 다른 모든 문제는 수정 된 extends Activityextends 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

9
확인은 당신이 실행 종속해야합니까 확장 : android.arch.lifecycle build.gradle에서
Muthukrishnan 라 젠드 란

어느 그는 몇 가지 라이브러리를 사용하고 추가 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
@Sheler 대답은 정확하지만 문서가 잘못되었습니다. 문서에서 ViewModel과 LiveDat 모두 "android.arch.lifecycle : extensions : 1.1.1"구현에 있다고 명시되어 있습니다
Pritish

2
이 솔루션이 여전히 내 문제를 해결하지 못했습니다. 내 앱 gradle 및 allprojects {repositories {google () jcenter ()}} 구현 'android.arch.lifecycle : extensions : 1.1.1'이 있습니다. 추가해야 할 다른 것이 있습니까?
musterjunk

1
ViewModelProvider 클래스가 보이지만 .of () 메서드가 없습니다. ViewModelProviders는 아직 정의되지 않았습니다. 중요한 경우 나는 Mac을 사용하고 있습니다.
musterjunk

프로젝트에 추가해야하는 최소 SDK 또는 Java 8 정의가 있습니까?
musterjunk

신경 쓰지 마. gradles 파일이 표시되지 않으면 동기화해야합니다.
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

1
이 링크에서 최신 androidx 버전을 확인하세요. developer.android.com/jetpack/androidx/migrate
user2301281

어리 석음은 무엇입니까! ViewModelProvider는 종속성없이 사용할 수 있지만 ViewModelProvider의 경우 추가 종속성이 필요합니다.
Rahul Rastogi

15

당신이 컴파일 된 SDK 버전 28을 사용하는 이상 만 얻을 수있는 하나의 실행 종속을 추가해야하는 경우 ViewModelLiveData

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

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

의 최신 버전을 알고 android.arch.lifecycle:extensions당신은 검색 할 수 있습니다 extensionsmaven.google.com/web/index.html 최신 버전을 볼
산지 브

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

Kotlin

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 공식 문서 에서이 문제를 해결합니다 . 아래에 추가build.grale

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

또는 Kotlin

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

대신에

viewModel = ViewModelProviders.of(this).get(BaseViewModel.class);


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;. 즉 ViewModelProviders와 함께 s.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.