관리 메뉴

나만을 위한 블로그

[Android] java.lang.RuntimeException: Cannot create an instance of class viewmodel 에러 해결 본문

Android

[Android] java.lang.RuntimeException: Cannot create an instance of class viewmodel 에러 해결

참깨빵위에참깨빵 2021. 9. 20. 19:14
728x90
반응형

프래그먼트에서 뷰모델을 사용하는데 갑자기 빌드가 되지 않았다.

해결방법을 검색해보니 AndroidViewModel을 상속해 만든 뷰모델을 사용하는 경우 아래와 같은 클래스를 만들어 사용하면 된다고 한다.

 

public class SetViewModelFactory implements ViewModelProvider.Factory
{
    private Application application;

    public SetViewModelFactory(Application application)
    {
        this.application = application;
    }

    @NonNull
    @Override
    public <T extends ViewModel> T create(@NonNull Class<T> aClass)
    {
        return (T) new MainViewModel(application);
    }
}

 

그리고 사용할 땐 아래와 같이 한다.

 

mainViewModel = new ViewModelProvider(this, new SetViewModelFactory(getActivity().getApplication()))
                .get(MainViewModel.class);

 

프래그먼트를 사용해도 new ViewModelProvider()의 인자로 this를 넘길 수 있다. 그 뒤에 오는 2번 인자의 new SetViewModelFactory()의 안에 getActivity().getApplication()으로 application을 넘겨주고, 내가 만든 뷰모델 클래스를 얻어와서 사용하고자 하는 프래그먼트 안에 선언한 뷰모델 객체에 넣어주면 에러는 해결된다.

반응형
Comments