5

Używam biblioteki dagger2. za każdym razem, gdy próbuję uruchomić mój projekt, nie można utworzyć instancji klasy widoku widoku.Nie można utworzyć wystąpienia niestandardowego ViewModel

główną działalnością gdzie Próbuję utworzyć instancję

((MovieApplication) getApplication()).getAppComponent().inject(this); 
    mViewModel = ViewModelProviders.of(this).get(MoviesDataViewModel.class); 

Moja klasa fabryka

public class ViewModelFactory implements ViewModelProvider.Factory { 
private MoviesDataViewModel mViewModel; 

@Inject 
public ViewModelFactory(MoviesDataViewModel viewModel) { 
    this.mViewModel = viewModel; 
} 

@Override 
public <T extends ViewModel> T create(Class<T> modelClass) { 
    if (modelClass.isAssignableFrom(MoviesDataViewModel.class)) { 
     return (T) mViewModel; 
    } 
    throw new IllegalArgumentException("Unknown class name"); 
} 

Mój dziennik

Caused by: java.lang.RuntimeException: Cannot create an instance of class com.moviedata.viewmodel.MoviesDataViewModel 
                   at android.arch.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:145) 
                   at android.arch.lifecycle.ViewModelProviders$DefaultFactory.create(ViewModelProviders.java:143) 
                   at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:128) 
                   at android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:96) 
                   at com.moviedata.ui.MainActivity.onCreate(MainActivity.java:28) 
                   at android.app.Activity.performCreate(Activity.java:6321) 
                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426) 
                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2535)  
                   at android.app.ActivityThread.access$1100(ActivityThread.java:154)  
                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1396)  
                   at android.os.Handler.dispatchMessage(Handler.java:102)  
                   at android.os.Looper.loop(Looper.java:148)  
                   at android.app.ActivityThread.main(ActivityThread.java:5582)  
                   at java.lang.reflect.Method.invoke(Native Method)  
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
                  Caused by: java.lang.InstantiationException: java.lang.Class<com.moviedata.viewmodel.MoviesDataViewModel> has no zero argument constructor 
                   at java.lang.Class.newInstance(Native Method) 

Odpowiedz

3

Zamiast:

mViewModel = ViewModelProviders.of(this).get(MoviesDataViewModel.class); 

Wykonaj:

mViewModel = ViewModelProviders.of(this, viewModelFactory).get(MoviesDataViewModel.class); 
+0

Thanku @azizbekian .. –

Powiązane problemy