In diesem Tutorial werden wir Shared Preferences in unserer Android-Anwendung verwenden, um Daten in Form von Schlüssel-Wert-Paaren zu speichern.
Übersicht über die gemeinsam genutzten Android-Einstellungen
Shared Preferences ermöglicht es Aktivitäten und Anwendungen, Einstellungen in Form von Schlüssel-Wert-Paaren ähnlich einer Map zu speichern, die auch dann bestehen bleiben, wenn der Benutzer die Anwendung schließt. Android speichert Shared Preferences-Einstellungen als XML-Datei im shared_prefs-Ordner unter DATA/data/{Anwendungspaket}-Verzeichnis. Der DATA-Ordner kann durch Aufruf von Environment.getDataDirectory()
erhalten werden. SharedPreferences sind anwendungsbezogen, d.h. die Daten gehen verloren, wenn eine der folgenden Optionen ausgeführt wird:
- beim Deinstallieren der Anwendung
- beim Löschen der Anwendungsdaten (über die Einstellungen)
Wie der Name schon sagt, dient der Hauptzweck dem Speichern benutzerspezifischer Konfigurationsdetails, wie z.B. benutzerspezifische Einstellungen, um den Benutzer in der Anwendung angemeldet zu halten. Um auf die Einstellungen zuzugreifen, haben wir drei APIs zur Auswahl:
- getPreferences() : wird innerhalb Ihrer Aktivität verwendet, um aktivitätsspezifische Einstellungen abzurufen
- getSharedPreferences() : wird innerhalb Ihrer Aktivität (oder anderem Anwendungskontext) verwendet, um anwendungsweite Einstellungen abzurufen
- getDefaultSharedPreferences(): Wird auf dem PreferenceManager verwendet, um die gemeinsam genutzten Einstellungen abzurufen, die mit dem allgemeinen Präferenzframework von Android zusammenarbeiten
. In diesem Tutorial verwenden wir getSharedPreferences()
. Die Methode ist wie folgt definiert: getSharedPreferences (String PREFS_NAME, int mode)
. PREFS_NAME ist der Dateiname. mode ist der Betriebsmodus. Die folgenden Betriebsmodi sind anwendbar:
- MODE_PRIVATE: der Standardmodus, bei dem die erstellte Datei nur von der aufrufenden Anwendung aufgerufen werden kann
- MODE_WORLD_READABLE: Das Erstellen von weltweit lesbaren Dateien ist sehr gefährlich und kann wahrscheinlich Sicherheitslücken in Anwendungen verursachen
- MODE_WORLD_WRITEABLE: Das Erstellen von weltweit beschreibbaren Dateien ist sehr gefährlich und kann wahrscheinlich Sicherheitslücken in Anwendungen verursachen
- MODE_MULTI_PROCESS: Diese Methode überprüft die Änderung von Einstellungen, auch wenn die Instanz der Shared Preference bereits geladen wurde
- MODE_APPEND: Dies fügt die neuen Einstellungen den bereits vorhandenen Einstellungen hinzu
- MODE_ENABLE_WRITE_AHEAD_LOGGING: Datenbanköffnungsflag. Wenn es gesetzt ist, wird das vorzeitige Protokollieren beim Schreiben standardmäßig aktiviert
Initialisierung
Wir benötigen einen Editor, um Änderungen in den gemeinsam genutzten Einstellungen vorzunehmen. Der folgende Code kann verwendet werden, um die gemeinsam genutzten Einstellungen zu erhalten.
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
Daten speichern
editor.commit() wird verwendet, um Änderungen in den gemeinsam genutzten Einstellungen zu speichern.
editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long
editor.commit(); // commit changes
Daten abrufen
Daten können aus den gespeicherten Einstellungen abgerufen werden, indem getString() wie folgt aufgerufen wird:
pref.getString("key_name", null); // getting String
pref.getInt("key_name", -1); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean
Daten löschen
remove(„Schlüsselname“) wird verwendet, um diesen bestimmten Wert zu löschen. clear() wird verwendet, um alle Daten zu entfernen.
editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email
editor.commit(); // commit changes
editor.clear();
editor.commit(); // commit changes
Projektstruktur
Android Shared Preferences Projektcode
Das Layout activity_main.xml
besteht aus zwei EditText-Ansichten, die Name und E-Mail speichern und anzeigen. Die drei Schaltflächen implementieren ihre jeweiligen onClicks in der MainActivity
.
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<Button
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="Save"
android:text="Save" />
<Button
android:id="@+id/btnRetr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:onClick="Get"
android:text="Retrieve" />
<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/etEmail"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:onClick="clear"
android:text="Clear" />
<EditText
android:id="@+id/etEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Email"
android:inputType="textEmailAddress"
android:layout_below="@+id/etName"
android:layout_marginTop="20dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<EditText
android:id="@+id/etName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Name"
android:inputType="text"
android:layout_alignParentTop="true"
android:layout_alignLeft="@+id/etEmail"
android:layout_alignStart="@+id/etEmail" />
</RelativeLayout>
Die Datei MainActivity.java
wird verwendet, um die Daten über Schlüssel zu speichern und abzurufen.
package com.journaldev.sharedpreferences;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
SharedPreferences sharedpreferences;
TextView name;
TextView email;
public static final String mypreference = "mypref";
public static final String Name = "nameKey";
public static final String Email = "emailKey";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = (TextView) findViewById(R.id.etName);
email = (TextView) findViewById(R.id.etEmail);
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
if (sharedpreferences.contains(Name)) {
name.setText(sharedpreferences.getString(Name, ""));
}
if (sharedpreferences.contains(Email)) {
email.setText(sharedpreferences.getString(Email, ""));
}
}
public void Save(View view) {
String n = name.getText().toString();
String e = email.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Name, n);
editor.putString(Email, e);
editor.commit();
}
public void clear(View view) {
name = (TextView) findViewById(R.id.etName);
email = (TextView) findViewById(R.id.etEmail);
name.setText("");
email.setText("");
}
public void Get(View view) {
name = (TextView) findViewById(R.id.etName);
email = (TextView) findViewById(R.id.etEmail);
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
if (sharedpreferences.contains(Name)) {
name.setText(sharedpreferences.getString(Name, ""));
}
if (sharedpreferences.contains(Email)) {
email.setText(sharedpreferences.getString(Email, ""));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Das Menü aufblasen; dadurch werden Elemente zur Aktionsleiste hinzugefügt, wenn diese vorhanden ist.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
mypreference ist der Name der Datei, in der das Schlüssel-Wert-Paar der gemeinsam genutzten Einstellungen gespeichert ist. Das Bild unten zeigt die endgültige Ausgabe unseres Projekts: Damit endet dieses Tutorial. Sie können das Projekt Android Shared Preferences über den folgenden Link herunterladen.
Source:
https://www.digitalocean.com/community/tutorials/android-shared-preferences-example-tutorial