DataStore für Kotlin: Komplettes Tutorial mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

DataStore für Kotlin: Komplettes Tutorial mit Beispielen

1. Was ist DataStore und warum wird es benötigt?

DataStore ist eine Bibliothek von Google zum Speichern kleiner Datenmengen in Kotlin- (und Android-)Apps. Sie wurde entwickelt, um die veraltete SharedPreferences zu ersetzen, und bietet eine sicherere, asynchrone und typsichere Methode zur Datenverwaltung. DataStore nutzt Kotlin Coroutines und Flow, was es zur idealen Wahl für moderne Apps macht, die mit reaktiver Programmierung arbeiten.

Warum DataStore? Das Hauptproblem von SharedPreferences ist das synchrone Lesen von der Festplatte, das den UI-Thread blockieren kann, sowie die fehlende Typunterstützung (alles wird als Set<String> gespeichert). DataStore löst diese Probleme: Alle Lese- und Schreibvorgänge sind asynchron, und die Daten werden in typisierten Objekten (über Protocol Buffers oder Preferences) gespeichert. Außerdem behandelt DataStore Serialisierungsfehler automatisch und bietet eine saubere API für die Datenverwaltung.

Die Bibliothek gibt es in zwei Varianten: Preferences DataStore (zum Speichern einfacher Schlüssel-Wert-Paare, ähnlich wie SharedPreferences) und Proto DataStore (zum Speichern typisierter Objekte über Protocol Buffers). In diesem Artikel konzentrieren wir uns auf Preferences DataStore, da es die einfachste und am häufigsten verwendete Variante ist.

2. Installation

DataStore wird über Maven Central verteilt. Um es in Ihr Kotlin/Android-Projekt einzubinden, fügen Sie die folgende Abhängigkeit in Ihre build.gradle.kts-Datei (Modul app) ein:

dependencies {
    // Preferences DataStore
    implementation("androidx.datastore:datastore-preferences:1.1.1")
    
    // Falls Sie Proto DataStore verwenden
    // implementation("androidx.datastore:datastore-core:1.1.1")
    
    // Für Coroutines-Unterstützung (normalerweise bereits im Projekt vorhanden)
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0")
}

Wenn Sie Gradle mit Groovy (build.gradle) verwenden, sieht die Zeile so aus:

implementation 'androidx.datastore:datastore-preferences:1.1.1'

Nach der Gradle-Synchronisation ist die Bibliothek bereit zur Verwendung.

3. Schnellstart – Minimales Arbeitsbeispiel

Wir erstellen einen einfachen DataStore zum Speichern eines Benutzernamens und eines Zählers.

import android.content.Context
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.intPreferencesKey
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

// Erweiterung für Context, die einen DataStore erstellt
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "user_settings")

// Schlüssel für die Daten
val USER_NAME_KEY = stringPreferencesKey("user_name")
val COUNTER_KEY = intPreferencesKey("counter")

class UserPreferences(private val context: Context) {

    // Lesen des Benutzernamens als Flow
    val userName: Flow<String?> = context.dataStore.data.map { preferences ->
        preferences[USER_NAME_KEY]
    }

    // Lesen des Zählers als Flow
    val counter: Flow<Int> = context.dataStore.data.map { preferences ->
        preferences[COUNTER_KEY] ?: 0
    }

    // Speichern des Benutzernamens
    suspend fun saveUserName(name: String) {
        context.dataStore.edit { preferences ->
            preferences[USER_NAME_KEY] = name
        }
    }

    // Erhöhen des Zählers
    suspend fun incrementCounter() {
        context.dataStore.edit { preferences ->
            val currentCounter = preferences[COUNTER_KEY] ?: 0
            preferences[COUNTER_KEY] = currentCounter + 1
        }
    }

Empfehlungen