인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

지지지지지님의 프로필 이미지
지지지지지

작성한 질문수

냉동코더의 알기 쉬운 Modern Android Development 입문

ViewModelProvider.Factory 질문 있습니다!

작성

·

487

0

안녕하세요. 코드를 따라 치다가 도저히 해결이 안되는 부분이 있어 가져왔습니다!

자꾸 아래와 같이 나타나길래 viewmodel 버전도 바꿔보고 따라해봤지만 자꾸 에러가 나네요...

위와 같이 에러가 납니다.

그리고 그냥 무시하고 앱을 실행시키면 아래와 같은 에러가 나고요.

Inheritance from an interface with '@JvmDefault' members is only allowed with -Xjvm-default option

혹시 몰라 Git 코드 놓겠습니다

https://github.com/Gseungmin/MVVMStudy

답변 3

0

냉동코더님의 프로필 이미지
냉동코더
지식공유자

지승민님의 코드를 받아서 확인해봤습니다.

우선 빌드를 성공시키기 위해서는 app레벨의 build.gradle에서 android 블록 안에 다음과 같이 코드를 추가해주시면 lifecycle의 오류를 회피할 수 있습니다.

android {
    ...
    kotlinOptions{
        freeCompilerArgs += [
                "-Xjvm-default=all",
        ]
    }
}

그리고 빌드는 성공했는데 앱이 실행되지 않고 크래쉬나길래 확인해 본 결과 뷰모델을 인스턴스화하는 코드가 다음과 같이 되어있었습니다.

    private lateinit var viewModel: MainViewModel

        viewModel = ViewModelProvider(this).get(MainViewModel::class.java)

        val factory = ViewModelFactory(100)
        val viewModel = ViewModelProvider(this, factory).get(MainViewModel::class.java)

이 부분을 다음과 같이 수정하면 문제없이 실행되게 됩니다.

    private lateinit var viewModel: MainViewModel

        // viewModel = ViewModelProvider(this).get(MainViewModel::class.java)

        val factory = ViewModelFactory(100)
        viewModel = ViewModelProvider(this, factory).get(MainViewModel::class.java)

0

냉동코더님의 프로필 이미지
냉동코더
지식공유자

안드로이드 스튜디오의 메뉴에서 File > Invalidate Caches / Restart를 실행시켜서 기존의 캐시들을 모두 삭제하신 후 디펜던시를 다음과 같이 입력해보시겠어요?

dependencies {

    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1"

    implementation 'androidx.core:core-ktx:1.7.0'

    implementation 'androidx.appcompat:appcompat:1.4.1'

    implementation 'com.google.android.material:material:1.5.0'

    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'

    testImplementation 'junit:junit:4.13.2'

    androidTestImplementation 'androidx.test.ext:junit:1.1.3'

    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

}

image

이렇게 했는데도 해결이 되지 않네요... 혹시 좀 더 근원적인 방법이 없을까요???

0

냉동코더님의 프로필 이미지
냉동코더
지식공유자

다음 링크에서 언급된 에러인것 같네요. 사용하고 있는 Lifecycle 라이브러리의 버전이 2.5.0-alpha01 이상이면 발생하는 것 같습니다.

https://stackoverflow.com/a/70993001

지승민님은 "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"을 사용하고 계시지만 'androidx.appcompat:appcompat:1.5.1'이 'Lifecycle 2.5.1'에 의존하고 있기 때문에 이런 오류가 발생한 것입니다. 제 build.gradle을 참조하셔서 모든 디펜던시의 버전을 동일하게 맞춰주시면 해결될 겁니다.

https://github.com/cliearl/book-search-app/blob/Practice02/app/build.gradle

똑같이 복붙을 해도 해결이 되지 않네요 ㅠㅠ

지지지지지님의 프로필 이미지
지지지지지

작성한 질문수

질문하기