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.

Was sind Android SharedPreferences?

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.

Methoden von SharedPreferences

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() oder apply() aufrufen, um die Werte in der SharedPreferences-Datei zu speichern. commit() speichert die Werte sofort, während apply() die Werte asynchron speichert.

SharedPreferences-Werte mit Kotlin setzen/abrufen

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)

Kotlin-Code zum Löschen und Entfernen von SharedPreferences-Einträgen

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.

Kotlin Android SharedPreferences Projektstruktur

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.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren:

centron Managed Cloud Hosting in Deutschland

Java-Array: So prüfst du Werte effizient

JavaScript
Wie prüft man, ob ein Java Array einen Wert enthält? Es gibt viele Möglichkeiten, um zu überprüfen, ob ein Java Array einen bestimmten Wert enthält. Einfache Iteration mit einer for-Schleife…