SharedPreferences
Speichern Sie einfache Schlüssel-Wert-Daten über App-Sitzungen hinweg mit SharedPreferences. Lernen Sie, Einstellungen zu speichern, zu lesen und zu entfernen.
SharedPreferences ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 6. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 6 Lektionen.
Optionen für die dauerhafte Speicherung
Android bietet mehrere Möglichkeiten, Daten lokal zu speichern:
- SharedPreferences – einfache Schlüssel-Wert-Paare (Einstellungen, Tokens)
- Room – strukturierte SQLite-Datenbank (komplexe Daten)
- DataStore – moderne asynchrone Alternative zu SharedPreferences
- Files – direkte Dateiein- und -ausgabe
SharedPreferences eignet sich ideal für einfache Einstellungen und Benutzervoreinstellungen.
Was ist SharedPreferences?
SharedPreferences speichert Daten als Schlüssel-Wert-Paare in einer XML-Datei auf dem Gerät. Unterstützt werden:
- String
- Int / Long / Float
- Boolean
- Set<String>
Die Daten bleiben über Neustarts der App hinweg erhalten und überstehen Konfigurationsänderungen (Drehung).
Eine SharedPreferences-Instanz abrufen
Es gibt zwei Möglichkeiten, ein SharedPreferences-Objekt abzurufen:
// 1. Named preferences (shared across activities)
val prefs = getSharedPreferences(
"MyAppPrefs", // file name
Context.MODE_PRIVATE // only your app can read it
)
// 2. Activity's default preferences
val prefs = getPreferences(Context.MODE_PRIVATE)Daten schreiben
Verwenden Sie einen Editor, um Werte zu schreiben, und rufen Sie anschließend apply() auf:
val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)
prefs.edit()
.putString("username", "alice")
.putInt("login_count", 5)
.putBoolean("dark_mode", true)
.apply() // async, non-blocking — preferred over commit()
// Kotlin extension (cleaner syntax):
with(prefs.edit()) {
putString("username", "alice")
apply()
}Daten lesen
Lesen Sie Werte über den Schlüssel aus und geben Sie einen Standardwert an, falls der Schlüssel nicht existiert:
val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)
val username = prefs.getString("username", "Guest") // default: "Guest"
val count = prefs.getInt("login_count", 0) // default: 0
val darkMode = prefs.getBoolean("dark_mode", false) // default: false
println("Hello, $username! Logins: $count. Dark: $darkMode")Praxisbeispiel: Design umschalten
Speichern und laden Sie eine Einstellung für den dunklen Modus:
class SettingsActivity : AppCompatActivity() {
private lateinit var binding: ActivitySettingsBinding
private lateinit var prefs: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding.root)
prefs = getSharedPreferences("settings", MODE_PRIVATE)
// Restore saved state
binding.switchDarkMode.isChecked = prefs.getBoolean("dark_mode", false)
binding.switchDarkMode.setOnCheckedChangeListener { _, isChecked ->
prefs.edit().putBoolean("dark_mode", isChecked).apply()
}
}
}Ein Login-Token speichern
Speichern und prüfen Sie ein Authentifizierungs-Token über Neustarts der App hinweg:
// Save token after login
fun saveToken(token: String) {
getSharedPreferences("auth", MODE_PRIVATE)
.edit()
.putString("token", token)
.apply()
}
// Check if user is logged in
fun isLoggedIn(): Boolean {
val token = getSharedPreferences("auth", MODE_PRIVATE)
.getString("token", null)
return token != null
}
// Clear on logout
fun logout() {
getSharedPreferences("auth", MODE_PRIVATE)
.edit()
.remove("token")
.apply()
}Daten entfernen und löschen
Entfernen Sie bestimmte Schlüssel oder löschen Sie alle Daten:
.remove("key")– einen Eintrag löschen.clear()– alle Daten in der Datei löschen
Rufen Sie immer .apply() auf (oder .commit(), wenn Sie eine synchrone Bestätigung benötigen).
SharedPreferences im Vergleich zu DataStore
SharedPreferences funktioniert gut, hat aber einige Einschränkungen:
- Synchrone Lesevorgänge können den Hauptthread blockieren
- Keine Typsicherheit
Jetpack DataStore ist die moderne Alternative – vollständig asynchron mit Kotlin Flow und Typsicherheit. Für neue Projekte sollten Sie DataStore bevorzugen. SharedPreferences wird weiterhin häufig verwendet und ist für kleine Datenmengen vollkommen geeignet.
Kurze Überprüfung
Welche Methode speichert Daten asynchron in SharedPreferences, ohne den UI-Thread zu blockieren?
Zusammenfassung: SharedPreferences
Sie können nun einfache Daten über mehrere App-Starts hinweg speichern:
- Abrufen mit
getSharedPreferences(name, MODE_PRIVATE) - Schreiben:
.edit().putString(key, value).apply() - Lesen:
.getString(key, defaultValue) - Entfernen:
.edit().remove(key).apply() apply()(asynchron) gegenübercommit()(synchron) verwenden
Nächster Kurs: App-Architektur – ViewModel, Room und Coroutines.
Häufig gestellte Fragen
Ist die Lektion „SharedPreferences“ kostenlos?
Ja — der vollständige Text von „SharedPreferences“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 6 Lektionen.
Was lerne ich in „SharedPreferences“?
Speichern Sie einfache Schlüssel-Wert-Daten über App-Sitzungen hinweg mit SharedPreferences. Lernen Sie, Einstellungen zu speichern, zu lesen und zu entfernen. Du übst Android Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Android Academy zu starten?
Keine Vorkenntnisse erforderlich. Android Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 6.
Wie lange dauert die Lektion „SharedPreferences“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Android Academy-Lektion Code schreiben und ausführen?
Ja. Jede Android Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Kotlin-Collections
- Grundlagen von RecyclerView
- Click-Ereignisse in RecyclerView
- SharedPreferences
- DataStore Preferences
- Adapter und DiffUtil