No se puede crear una instancia de ViewModel personalizado
Estoy usando la biblioteca dagger2. Cuando estoy tratando de ejecutar mi proyecto se dice no es capaz de crear instancia de la clase de modelo de vista.
Actividad principal donde estoy intentando crear una instancia
- Guice Performance en Android
- Roboguice y simulacros: ¿Cómo roboguice inyectar un servicio de simulacro cuando la prueba, pero utiliza el REAL de lo contrario?
- ¿Cómo obfuscate el proyecto con Dagger 2.0 usando Proguard?
- Cómo inyectar el contexto usando RoboGuice en Android?
- ¿Cómo usar Dagger 2 con Buck que contiene un montón de módulos de dólar?
((MovieApplication) getApplication()).getAppComponent().inject(this); mViewModel = ViewModelProviders.of(this).get(MoviesDataViewModel.class);
Mi clase de fábrica
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"); }
Mi registro
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)
- Cómo migrar la inyección que falta del módulo con complete = false de Dagger 1 a Dagger 2
- Ejemplos de patrones de diseño de Android MVVM
- Android Dagger actualiza los valores fuera del módulo
- ¿Cuál es el razonamiento para separar los métodos RestAdapter.build () y .create () al usar Dagger?
- ¿Cómo inyectar una dependencia al probar una actividad de Android sin un marco de terceros?
- ¿Hay algún marco de aplicación de Android como primavera?
- Dagger 2 en Android: inyectar la misma dependencia en Activity y retener Fragment
- OkHttp Interceptor utilizando OkHttpClient sin ciclo de dependencia
En lugar de:
mViewModel = ViewModelProviders.of(this).get(MoviesDataViewModel.class);
Realizar:
mViewModel = ViewModelProviders.of(this, viewModelFactory).get(MoviesDataViewModel.class);