Optimale Datenverwaltung in Android-Apps mit SharedPreferences und Kotlin
Entdecken Sie in unserem neuesten Blogbeitrag, wie Sie die leistungsstarke Funktionalität von Android SharedPreferences mit Kotlin nutzen können. Von der grundlegenden Implementierung bis zur effizienten Datenverwaltung – erkunden Sie prägnante Tipps und Tricks, um Ihre Android-Apps zu optimieren.
SharedPreferences ist seit API-Level 1 Teil der Android-API. Es ist eine Schnittstelle, die es uns ermöglicht, Daten lokal zu speichern, zu ändern oder zu löschen. Im Allgemeinen wird es verwendet, um benutzerspezifische lokale Daten wie Anmeldeformulare zwischenzuspeichern. Die Daten werden in Form von Schlüssel-Wert-Paaren gespeichert. Es können mehrere Dateien erstellt werden, um die SharedPreferences-Daten zu speichern.
Werfen wir einen Blick auf einige wichtige Methoden von SharedPreferences.
- Die Methode
getSharedPreferences(String, int)
wird verwendet, um eine Instanz von SharedPreferences abzurufen. Hier ist String der Name der SharedPreferences-Datei und int der übergebene Kontext. - Der
SharedPreferences.Editor()
wird verwendet, um Werte in den SharedPreferences zu bearbeiten. - Wir können
commit()
oderapply()
aufrufen, um die Werte in der SharedPreferences-Datei zu speichern.commit()
speichert die Werte sofort, währendapply()
die Werte asynchron speichert.
Wir können Werte in unserer SharedPreferences-Instanz wie folgt mit Kotlin setzen:
val sharedPreference = getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
var editor = sharedPreference.edit()
editor.putString("username", "Anupam")
editor.putLong("l", 100L)
editor.commit()
Zum Abrufen eines Wertes:
sharedPreference.getString("username", "defaultName")
sharedPreference.getLong("l", 1L)
Wir können auch alle Werte löschen oder einen bestimmten Wert entfernen, indem wir die Methoden clear()
und remove(String key)
aufrufen.
editor.clear()
editor.remove("username")
Hinweis: Änderungen am Editor nach dem Aufruf von commit oder apply werden nicht berücksichtigt.
In dieser Anwendung haben wir einen Anmeldebildschirm, der es uns ermöglicht, Formulardaten zu speichern oder zu löschen.
1. Layout-Code
Der Code für die activity_main.xml
Layout-Datei:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/inUserId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:hint="User ID"
android:inputType="number" />
<EditText
android:id="@+id/inPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/inUserId"
android:hint="Password"
android:inputType="textPassword" />
<Button
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/inPassword"
android:text="SAVE USER DATA" />
<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/btnSave"
android:text="CLEAR USER DATA" />
<Button
android:id="@+id/btnShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/inPassword"
android:text="SHOW" />
<Button
android:id="@+id/btnShowDefault"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/btnSave"
android:text="Show Default" />
</RelativeLayout>
2. MainActivity Kotlin Code
Der Code für die MainActivity.kt
Kotlin-Klasse:
package com.journaldev.androidlysharedpreferences
import android.content.Context
import android.content.SharedPreferences
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.preference.PreferenceManager
import android.view.View
import com.journaldev.androidlysharedpreferences.PreferenceHelper.defaultPreference
import com.journaldev.androidlysharedpreferences.PreferenceHelper.password
import com.journaldev.androidlysharedpreferences.PreferenceHelper.userId
import com.journaldev.androidlysharedpreferences.PreferenceHelper.clearValues
import com.journaldev.androidlysharedpreferences.PreferenceHelper.customPreference
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity(), View.OnClickListener {
val CUSTOM_PREF_NAME = "User_data"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnSave.setOnClickListener(this)
btnClear.setOnClickListener(this)
btnShow.setOnClickListener(this)
btnShowDefault.setOnClickListener(this)
}
override fun onClick(v: View?) {
val prefs = customPreference(this, CUSTOM_PREF_NAME)
when (v?.id) {
R.id.btnSave -> {
prefs.password = inPassword.text.toString()
prefs.userId = inUserId.text.toString().toInt()
}
R.id.btnClear -> {
prefs.clearValues
}
R.id.btnShow -> {
inUserId.setText(prefs.userId.toString())
inPassword.setText(prefs.password)
}
R.id.btnShowDefault -> {
val defaultPrefs = defaultPreference(this)
inUserId.setText(defaultPrefs.userId.toString())
inPassword.setText(defaultPrefs.password)
}
}
}
}
object PreferenceHelper {
val USER_ID = "USER_ID"
val USER_PASSWORD = "PASSWORD"
fun defaultPreference(context: Context): SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
fun customPreference(context: Context, name: String): SharedPreferences = context.getSharedPreferences(name, Context.MODE_PRIVATE)
inline fun SharedPreferences.editMe(operation: (SharedPreferences.Editor) -> Unit) {
val editMe = edit()
operation(editMe)
editMe.apply()
}
var SharedPreferences.userId
get() = getInt(USER_ID, 0)
set(value) {
editMe {
it.putInt(USER_ID, value)
}
}
var SharedPreferences.password
get() = getString(USER_PASSWORD, "")
set(value) {
editMe {
it.putString(USER_PASSWORD, value)
}
}
var SharedPreferences.clearValues
get() = { }
set(value) {
editMe {
it.clear()
}
}
}
Fazit
Kotlin hat das Management von SharedPreferences in Android-Anwendungen vereinfacht und den Code lesbarer gemacht. Durch die Verwendung von Kotlin-Eigenschaften und höherwertigen Funktionen können wir Daten einfach speichern, abrufen und bearbeiten. Die Integration von SharedPreferences in eine Kotlin-basierte Android-Anwendung bietet eine elegante und effiziente Möglichkeit, Benutzerdaten lokal zu verwalten. Mit Kotlin wird die Entwicklung von Android-Apps nicht nur effizienter, sondern auch angenehmer.