'Assisted' is deprecated. Deprecated in Java
'ViewModelInject' is deprecated. Deprecated in Java
'ViewModelInject' is deprecated. Deprecated in Java
'Assisted' is deprecated. Deprecated in Java
Was ist die neue Art, daran zu arbeiten?
Verwenden Sie in alpha03 das Neue @HiltViewModel und das Normale @Inject jetzt wie unten gezeigt.
@HiltViewModel
class MyViewModel @Inject constructor(
private val repository: Repository,
private val savedStateHandle: SavedStateHandle
) : ViewModel(), LifecycleObserver {
// Some code
}
Was ist, wenn wir eine Zeichenfolge vom Fragment an den Konstruktor von ViewModel übergeben und auch Repositorys injizieren möchten
– Daniel Javaid
10. Mai 2021 um 13:59 Uhr
@DaniyalJavaid Ich denke, es gibt nur zwei Möglichkeiten. 1) Verwenden Sie ein SavedStateHandle als Container für Fragmentargumente (genau wie in der Antwort). 2) Erstellen Ihre eigene AssistedFactory.
– Daniil Pawlenko
16. Mai 2021 um 14:14 Uhr
Können wir private Parameter verwenden? manchmal erhalte ich “cannot be final”-Fehler.
– Amg91
10. Dezember 2021 um 4:24 Uhr
Taki
In der letzten Aktualisierung des Dolchgriffs wurden nur wenige Änderungen vorgenommen, sodass Sie in Ihrem Fall verwenden können @HiltViewModel und @Inject um es mit ViewModel zu verwenden.
@HiltViewModel
class MyViewModel @Inject constructor(
private val repository: Repository,
private val savedStateHandle: SavedStateHandle
) : ViewModel(), LifecycleObserver {
// Some codes...
}
Auch wenn Sie verwendet haben ApplicationComponentim neuesten Update wird es geändert in SingletonComponent.
Also in Ihrer Modulklasse auf diese Weise.
Bitte schauen Sie noch einmal in die Dokumentation. Deine Beispiele sind falsch. @HiltViewModelInject wird nicht mehr benötigt, da es veraltet ist.
– Andreas
14. Februar 2021 um 11:36 Uhr
Bist du dir sicher ? weil wir früher nur ViewModelInject hinzugefügt haben, aber in der neuesten Version verwenden wir HiltViewModel zusammen mit Inject für den Viewmodel-Klassenkonstruktor
Nun, vielleicht sollten Sie sich Ihren eigenen Link ansehen. Wie Sie deutlich sehen können, ist Ihr Beispiel falsch! ‘@Assisted’ wird nicht mehr vor savedstatehandle benötigt und es sollte ‘@HiltViewModel’ und nicht ‘@HiltViewModelInject’ sein, wie Sie geschrieben haben.
– Andreas
14. Februar 2021 um 15:26 Uhr
@Andrew danke für die Klarstellung, war eindeutig mein Fehler, schätzte die Korrektur
– Taki
14. Februar 2021 um 16:09 Uhr
Anubhav
@ViewModelInject ist veraltet und wurde durch ersetzt @HiltViewModel.
Das mit kommentierte ViewModel HiltViewModel wird zur Erstellung durch HiltViewModelFactory verfügbar sein. Das HiltViewModel, das einen mit annotierten Konstruktor enthält Injizieren seine Abhängigkeiten werden in den Konstruktorparametern definiert, die von Dagger’s Hilt injiziert werden. https://dagger.dev/api/latest/dagger/hilt/android/lifecycle/HiltViewModel
Ein einfaches ViewModel sieht nun so aus:
@HiltViewModel
class MainViewModel @Inject constructor(application: Application) :
AndroidViewModel(application) {
}
or
@HiltViewModel
class MainViewModel @Inject constructor() :
ViewModel() {
}
whatever your use case might be.
Erhalten Sie den folgenden Fehler nach dem Upgrade von hilt auf v2.31+?:
2021-04-02 20:05:22.443 3718-3718/com.demo.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.demo.app, PID: 3718
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.demo.app/com.demo.app.ux.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.demo.app.ux.viewmodels.MainViewModel
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) .....
Versuchte die meisten Dinge, die in erwähnt wurden hier und auch das Hinzufügen eines separaten Moduls mit der Modellansichtsanbieter-API, aber dass nichts davon funktionierte, war eine Sache, die beim Upgrade vermisst wurde, auch die Klassenpfadversion zu ändern.
Damit dies funktioniert, müssen wir den Klassenpfad auf 2.31 und höher aktualisieren, der in Ihrem Projektgradle vorhanden ist: