Search code examples
androidandroid-viewmodel

Caused by: java.lang.NoSuchMethodException: <init> [class android.app.Application] - viewmodel


I am creating my own viewmodel in my android app.
When the app is launched it's crashing and I got the error

"Caused by: java.lang.NoSuchMethodException: [class android.app.Application]"

1. view model class:

public class MainViewModel extends AndroidViewModel implements OnCommunicationListener {
    
public MainViewModel(@NonNull Application application, DeviceData deviceData) {
        super(application);

….
}

2. view model factory

public class ViewModelFactory extends ViewModelProvider.AndroidViewModelFactory {

    @NonNull
    private final Application application;
    private final DeviceData deviceData;

    public ViewModelFactory(@NonNull Application application, DeviceData deviceData) {
        super(application);
        this.application = application;
        this.deviceData = deviceData;
    }

    @NonNull
    @Override
    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
        if (modelClass.isAssignableFrom(MainViewModel.class)) {
            return (T) new MainViewModel(application, deviceData);
        }
        throw new IllegalArgumentException("Unknown ViewModel class");
    }
}

3. Main activity class

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

App crashes when the following line executed in the main activity

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

Solution

  • You need to pass the viewmodel factory to the of call or else your factory will not get used.

    viewModel = ViewModelProviders.of(this, viewModelFactoryInstance).get(MainViewModel.class);