Android-ViewModel hat keine null-argument-Konstruktor
Ich bin nach diese Dokumentation über LiveData und ViewModel.
In der doc, der ViewModel-Klasse hat Konstruktor als solche,
public class UserModel extends ViewModel {
private MutableLiveData<User> user;
@Inject UserModel(MutableLiveData<User> user) {
this.user = user;
}
public void init() {
if (this.user != null) {
return;
}
this.user = new MutableLiveData<>();
}
public MutableLiveData<User> getUser() {
return user;
}
}
Allerdings, wenn ich den code ausführen, bekomme ich die exception:
final UserViewModelviewModel = ViewModelProviders.of(this).get(UserViewModel.class);
Verursacht durch: java.lang.RuntimeException: kann Nicht erstellen Sie eine Instanz der Klasse UserViewModel
Verursacht durch: java.lang.InstantiationException:
java.lang.Class
hat keine null-argument-Konstruktor
Sollten Sie auf diesen link stackoverflow.com/a/53956997/7558125
InformationsquelleAutor Prabin Timsina | 2017-05-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während der Initialisierung der Unterklassen von
ViewModel
mitViewModelProviders
standardmäßig erwartet IhrUserModel
Klasse die null-argument-Konstruktor.In Ihrem Fall ist Ihr Konstruktor hat argument
MutableLiveData<User> user
Einen Weg, um dies zu beheben, haben standardmäßig keine arg-Konstruktor für Ihre
UserModel
Sonst, wenn Sie wollen, um eine nicht-null-argument-Konstruktor für Ihr ViewModel-Klasse, die Sie haben können, um eine benutzerdefinierte
ViewModelFactory
Klasse zu initialisieren, der ViewModel-Instanz, die UmsetzungViewModelProvider.Factory
- Schnittstelle.Ich habe nicht versucht noch, aber hier ist der link zum exzellenten Beispiel von google für den gleichen: github.com/googlesamples/android-architecture-components.
Speziell, Check-out dieser Klasse GithubViewModelFactory.java für Java-code und Klasse GithubViewModelFactory.kt für entsprechende Kotlin-code
Ich bin immer die gleichen Fehler, ich habe DaggerAppComponent Klasse und es ist alles generiert die abhängigkeitsdiagramm richtig.
Hier ist die Google-Probe, bevor Sie es geändert kotlin: github.com/googlesamples/android-architecture-components/blob/...
InformationsquelleAutor Shahbaz Ahmed
ViewModelFactory
, der uns ein Recht ViewModel ausViewModelModule
ViewModelModule
ist verantwortlich für die Bindung über alle ViewModel-Klassen inMap<Class<? extends ViewModel>, Provider<ViewModel>> viewModels
ViewModelKey
ist eine Anmerkung für die Verwendung als Schlüssel in der Map und sieht aus wieNun sind Sie in der Lage, zum erstellen von ViewModel und erfüllen alle notwendigen Abhängigkeiten aus dem Diagramm
Instanziieren ViewModel
Und nicht Fälscher hinzufügen
ViewModelModule
inmodules
Liste[dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.arch.lifecycle.ViewModel>,javax.inject.Provider<android.arch.lifecycle.ViewModel>> cannot be provided without an @Provides-annotated method.
Es ist schwer zu sagen, was das problem ist ohne zu sehen, das ganze Projekt, dann kann ich davon ausgehen dass 1. Kind von ViewModel wurde nicht deklariert in
ViewModelModule
. 2.ViewModelModule
wurde nicht HinzugefügtComponent
ich habe dieselben Probleme, erstellen Konstruktor ohne argument und @ Inject annotation
mein Problem war, dass ich Spritzen -ing viewModel im Fragment,aber trotzdem thx :))
willkommen captain
InformationsquelleAutor yoAlex5
Wenn Sie parameter im Konstruktor dann :
DOLCH 2 public Konstruktor für @inject dependency
Sonst Dolch 2 senden Sie die Fehlermeldung "kann nicht instanziiert viewmodel-Objekt"
InformationsquelleAutor Shahid Ahmad
Das problem kann gelöst werden, durch die Verlängerung
UserModel
ausAndroidViewModel
die application context aware ViewModel und erfordertApplication
parameter-Konstruktor nur. (Dokumentation)Ex- (kotlin)
Dies funktioniert für version
2.0.0-alpha1
.InformationsquelleAutor rushi
Schrieb ich eine Bibliothek, sollte die Erreichung dieses mehr einfache und Weise cleaner, keine multibindings oder Fabrik boilerplate gebraucht, während es auch die Fähigkeit, weitere parametrieren der
ViewModel
zur Laufzeit:https://github.com/radutopor/ViewModelFactory
In der Ansicht:
InformationsquelleAutor Radu Topor