Uložení dat pomocí SharedPreferences

Jaromír Landa
1 min readJul 29, 2020

--

SharedPreferences je třída, která umožňuje ukládat data v podobě klíč-hodnota. Tedy podobný princip jak běžná mapa (např. Hashmap). Myšlenkou SharedPreferences je uložení jednoduchých hodnot (String, Boolean, Int, Long,…) které potřebujeme uchovat i po vypnutí aplikace.

Data jsou uložena do XML souboru, který je při načítání a ukládání hodnot vždy otevřen a následně ukončen.

Nejběžnějšími příklady použití jsou:
- uložení informace o prvním spuštění aplikace.
- uložení přihlašovacího tokenu (při komunikaci s REST API)
- uložení nastavení aplikace (preference uživatele)

Práce s SharedPreferences

Velice užitečné je obalení třídy vlastní třídou, která slouží jak rozhraní pro práci s ní. Třída může být statická (v kotlinu companion object). Díky tomu nemusíme vytvářet instanci.

class SPUtil {

companion object {

private const val SP_FILE = "sp_file_name"

private fun
getSharedPreferences(context: Context)
: SharedPreferences{
return context.getSharedPreferences(
SP_FILE, Context.MODE_PRIVATE)
}

fun writeBoolean(context: Context,
key: String,
value: Boolean){
with (getSharedPreferences(context).edit()) {
putBoolean(key, value)
commit()
}
}

fun readBoolean(context: Context,
key: String): Boolean {
return getSharedPreferences(context).getBoolean(key, true)
}
}
}

V kódu je private metoda getSharedPreferences, která umožňuje získat vždy ten stejný objekt a pak metody writeBoolean a readBoolean, které zapíší a čtou true/false hodnotu z SharedPreferences.

commit() vs. apply()

Při ukládání hodnoty máme na výběr ze dvou metod, commit nebo apply. Commit uloží hodnotu hned a apply uloží hodnotu asynchronně. Podle googlu je doporučené použit apply, zkušenosti ovšem radí commit. Tím, že je apply asynchronní nemusí dojít k okamžitému uložení hodnoty, což ve většině případů nevadí. Nicméně jsou situace, kdy to může být problémové a je nutné na to pamatovat.

Zdroje:
https://developer.android.com/reference/android/content/SharedPreferences
https://developer.android.com/training/data-storage/shared-preferences

https://developer.android.com/reference/android/content/SharedPreferences.Editor

--

--

No responses yet