In deze tutorial zullen we Gedeelde Voorkeuren gebruiken in onze Android-toepassing om gegevens op te slaan in de vorm van een sleutel-waarde-paar.
Overzicht van Gedeelde Voorkeuren in Android
Gedeelde Voorkeuren stellen activiteiten en toepassingen in staat voorkeuren te behouden, in de vorm van sleutel-waarde-paren, vergelijkbaar met een Map die zelfs persistent blijft wanneer de gebruiker de toepassing afsluit. Android slaat Gedeelde Voorkeuren op als XML-bestand in de shared_prefs-map onder de DATA/data/{toepassingspakket} directory. De DATA-map kan worden verkregen door Environment.getDataDirectory()
te bellen. SharedPreferences is toepassingsspecifiek, d.w.z. de gegevens gaan verloren bij het uitvoeren van een van de volgende opties:
- bij het verwijderen van de toepassing
- bij het wissen van de toepassingsgegevens (via Instellingen)
Zoals de naam al aangeeft, is het primaire doel het opslaan van door de gebruiker gespecificeerde configuratiedetails, zoals gebruikersspecifieke instellingen, waardoor de gebruiker ingelogd blijft in de toepassing. Om toegang te krijgen tot de voorkeuren hebben we drie API’s om uit te kiezen:
- getPreferences() : gebruikt vanuit uw Activiteit, om activiteitsspecifieke voorkeuren te openen
- getSharedPreferences() : gebruikt vanuit uw Activiteit (of andere toepassingscontext), om toepassingsspecifieke voorkeuren te openen
- getDefaultSharedPreferences(): gebruikt op de PreferenceManager, om de gedeelde voorkeuren te krijgen die samenwerken met het algehele voorkeurssysteem van Android
In deze tutorial gaan we met getSharedPreferences()
. De methode is als volgt gedefinieerd: getSharedPreferences(String PREFS_NAME, int mode)
PREFS_NAME is de naam van het bestand. mode is de bedrijfsmodus. Hieronder volgen de van toepassing zijnde bedrijfsmodi:
- MODE_PRIVATE: de standaardmodus, waarbij het gemaakte bestand alleen toegankelijk is voor de aanroepende toepassing
- MODE_WORLD_READABLE: Het maken van wereldleesbare bestanden is erg gevaarlijk en kan waarschijnlijk beveiligingslekken in toepassingen veroorzaken
- MODE_WORLD_WRITEABLE: Het maken van wereldschrijfbare bestanden is erg gevaarlijk en kan waarschijnlijk beveiligingslekken in toepassingen veroorzaken
- MODE_MULTI_PROCESS: Deze methode controleert op wijzigingen in voorkeuren, zelfs als de Shared Preference-instantie al is geladen
- MODE_APPEND: Hiermee worden de nieuwe voorkeuren toegevoegd aan de al bestaande voorkeuren
- MODE_ENABLE_WRITE_AHEAD_LOGGING: Database open vlag. Wanneer deze is ingesteld, wordt standaard write ahead logging ingeschakeld
Initialisatie
We hebben een editor nodig om wijzigingen aan te brengen en op te slaan in gedeelde voorkeuren. De volgende code kan worden gebruikt om de gedeelde voorkeuren te verkrijgen.
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
Gegevens opslaan
editor.commit() wordt gebruikt om wijzigingen op te slaan in de gedeelde voorkeuren.
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
Gegevens ophalen
Gegevens kunnen worden opgehaald uit opgeslagen voorkeuren door getString() aan te roepen zoals hieronder:
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
Gegevens wissen of verwijderen
remove(“sleutel_naam”) wordt gebruikt om die specifieke waarde te verwijderen. clear() wordt gebruikt om alle gegevens te verwijderen.
editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email
editor.commit(); // commit changes
editor.clear();
editor.commit(); // commit changes
Projectstructuur
Android Shared Preferences Project Code
Het lay-outbestand activity_main.xml
bestaat uit twee EditText-weergaven die de naam en e-mail opslaan en weergeven. De drie knoppen implementeren hun respectievelijke onClicks in de 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>
Het bestand MainActivity.java
wordt gebruikt om de gegevens op te slaan en op te halen via sleutels.
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) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
mypreference is de naam van het bestand waarin het key-value-paar van gedeelde voorkeuren is opgeslagen. De onderstaande afbeelding toont de uiteindelijke uitvoer van ons project: Hiermee komt er een einde aan deze tutorial. Je kunt het project Android Shared Preferences downloaden via de onderstaande link.
Source:
https://www.digitalocean.com/community/tutorials/android-shared-preferences-example-tutorial