DataStore- und Injektionsabhängigkeit von Simona Stojanovic Android-Entwickler Februar 2022

Simona Stojanovic

In den nächsten Beiträgen von uns Jetpack DataStore-ReiheWir behandeln einige zusätzliche Konzepte, um zu verstehen, wie DataStore mit anderen APIs kommuniziert, damit Ihnen alles zur Verfügung steht, was Sie verwenden können Produktionsumfeld. In diesem Beitrag konzentrieren wir uns auf Einspritzabhängigkeiten sind Griff. Wir verweisen auf Datenspeicher Einstellungen ich Proto codelabs durch diesen Beitrag für Codebeispiele.

Wir brauchen einen Singleton für die Erstellung mehr als eine Instanz aus dem DataStore für eine bestimmte Datei kann alle DataStore-Funktionen beschädigen. In einer Produktionsumgebung würden wir jedoch normalerweise eine DataStore-Instanz per erhalten Injektionsabhängigkeit. Schauen wir uns also an, wie der DataStore mit arbeitet Griffeine Suchtinjektionsbibliothek, um uns zu helfen Standard reduzieren manuelles Abhängigkeitsmanagement. Wenn Sie mit Hilt nicht vertraut sind, empfehlen wir Ihnen, es zuerst durchzugehen Verwenden Sie Hilt in Ihrer Android-App Codelab zum Erlernen grundlegender Konzepte wie z Components, Modules und andere.

Griff platzieren

Alle Anwendungen, die Hilt verwenden, müssen enthalten Application Klasse mit gekennzeichnet @HiltAndroidApp zum Ausführen der Hilt-Codegenerierung, einschließlich der Basisklasse für Ihre Anwendung, die als Abhängigkeitscontainer auf Anwendungsebene dient. In unserem Fall erstellen wir eine einfache TasksApp und füge es unserem hinzu AndroidManifest.xml:

DataStore-Einstellungen einfügen

Wir haben diese Parameter bereits in der Serie erwähnt, aber fassen wir schnell zusammen:

  • corruptionHandler (optional) – aufgerufen, wenn a CorruptionException wird vom Serialisierer ausgeworfen, wenn Daten nicht deserialisiert werden können, und gibt dem DataStore Anweisungen zum Ersetzen beschädigter Daten
  • migrations (optional) – Liste DataMigration vorherige Daten in den DataStore zu verschieben
  • scope (optional) – das Ausmaß, in dem IO-Operationen und Transformationsfunktionen durchgeführt werden; in diesem Fall verwenden wir wieder gleichen Bereich wie die standardmäßige DataStore-API
  • produceFile – erzeugt File Objekt für Preferences DataStore basierend auf geliefert Context ich namedarin gespeichert this.applicationContext.filesDir + datastore/ Unterverzeichnisse

Jetzt, da wir ein Modul haben, das Hilt anweist, wie wir unseren DataStore erstellen, müssen wir noch ein paar Anpassungen vornehmen, damit wir erfolgreich bauen können.

Hilt kann Abhängigkeiten zu anderen Android-Klassen bereitstellen, die sie haben @AndroidEntryPoint Hinweis, zusammen mit @HiltAndroidApp Pro Application ich @HiltViewModel Pro ViewModel Klassen. Wenn Sie die Android-Klasse mit markieren @AndroidEntryPoint, dann müssen Sie auch andere Android-Klassen markieren, die davon abhängen. Wenn Sie zum Beispiel a notieren Fragmentdann müssen Sie auch alle Aktivitäten markieren, bei denen Sie es verwenden Fragment.

Das bedeutet, dass wir Folgendes hinzufügen müssen:

Wir haben keine anderen in dieser Probe komplexe Injektionen, wie benutzerdefinierte Builder, Factorys oder Schnittstellenimplementierungen. Wir können uns also auf Hilt und die Konstruktorinjektion für alle anderen Abhängigkeiten verlassen, die wir durchlaufen müssen. Wir werden verwenden @Inject ein Hinweis im Klassenkonstruktor, um Hilt anzuweisen, wie seine Instanzen bereitzustellen sind:

Lassen Sie uns es schließlich vollständig loswerden preferencesDataStore ein Delegierter von der Spitze von uns TasksActivity da wir es nicht mehr brauchen. Wir werden auch die Art und Weise ändern, wie es uns gehört viewModel ist vorgesehen TaskActivity onCreatedenn seine Abhängigkeiten werden nun eingefügt:

Proto DataStore einfügen

Das ist es! Sie können die App jetzt ausführen und überprüfen, ob alle Abhängigkeiten jetzt korrekt eingefügt wurden.

Begleiten Sie uns für den nächsten Beitrag aus unserer Serie, in dem wir untersuchen, wie man es verwendet Data Warehouse mit Kotlin-Serialisierung.