[Error] java.lang.RuntimeException: Cannot create an instance of class viewmodel

Minji Jeong·2022년 5월 9일
0

Troubleshooting

목록 보기
4/21
post-thumbnail
post-custom-banner

문제

public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState){
		viewModel=new ViewModelProvider(this).get(MyViewModel.class);
}

메인스레드에서 뷰모델 생성 시 뷰모델 인스턴스가 생성되지 않아 발생했다. 이 문제는 AndroidViewModel을 상속한 뷰모델을 사용하는 경우, ViewModelProvider()에 파라미터로 Factory 객체를 넘겨주지 않아서 ViewModel이 제대로 인스턴스화 되지 못한 것이다.

public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull Factory factory) {
    this(owner.getViewModelStore(), factory);
} -> 파라미터로 ViewModelStoreOwnerFactory 객체를 받음

해결

뷰모델 인스턴스 생성 시 넘겨줄 Factory 객체를 생성한다.

public class ViewModelFactory implements ViewModelProvider.Factory {

    private Application application;

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

    @NonNull
    @Override
    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
        return (T) new ViewModel(application);
    }
}
viewModel = new ViewModelProvider(this, new ViewModelFactory(getActivity().getApplication())).get(ViewModel.class);

Reference

https://0391kjy.tistory.com/37

profile
Flutter Developer
post-custom-banner

0개의 댓글