In questo tutorial utilizzeremo le Shared Preferences nella nostra applicazione Android per memorizzare dati sotto forma di coppia chiave-valore.
Panoramica sulle Shared Preferences di Android
Le Shared Preferences consentono ad attività e applicazioni di conservare preferenze sotto forma di coppie chiave-valore simili a una mappa che persistono anche quando l’utente chiude l’applicazione. Android memorizza le impostazioni delle Shared Preferences come file XML nella cartella shared_prefs all’interno della directory DATA/data/{package dell’applicazione}. La cartella DATA può essere ottenuta chiamando Environment.getDataDirectory()
. SharedPreferences sono specifiche dell’applicazione, ovvero i dati vengono persi eseguendo una delle seguenti opzioni:
- alla disinstallazione dell’applicazione
- alla cancellazione dei dati dell’applicazione (tramite Impostazioni)
Come suggerisce il nome, lo scopo principale è memorizzare dettagli di configurazione specificati dall’utente, come impostazioni specifiche dell’utente, mantenendo l’utente connesso all’applicazione. Per accedere alle preferenze, abbiamo tre API tra cui scegliere:
- getPreferences() : utilizzato all’interno della tua Activity, per accedere alle preferenze specifiche dell’attività
- getSharedPreferences() : utilizzato all’interno della tua Activity (o di altri contesti dell’applicazione), per accedere alle preferenze a livello di applicazione
- getDefaultSharedPreferences(): utilizzato su PreferenceManager, per ottenere le preferenze condivise che lavorano in collaborazione con il framework delle preferenze complessive di Android
In questo tutorial utilizzeremo getSharedPreferences()
. Il metodo è definito come segue: getSharedPreferences (String PREFS_NAME, int mode)
PREFS_NAME è il nome del file. mode è la modalità di funzionamento. Di seguito sono riportate le modalità di funzionamento applicabili:
- MODE_PRIVATE: la modalità predefinita, in cui il file creato può essere accessibile solo dall’applicazione chiamante
- MODE_WORLD_READABLE: Creare file leggibili dal mondo è molto pericoloso e probabile che causi buchi di sicurezza nelle applicazioni
- MODE_WORLD_WRITEABLE: Creare file scrivibili dal mondo è molto pericoloso e probabile che causi buchi di sicurezza nelle applicazioni
- MODE_MULTI_PROCESS: Questo metodo verificherà la modifica delle preferenze anche se l’istanza di Shared Preference è già stata caricata
- MODE_APPEND: Questo aggiungerà le nuove preferenze alle preferenze già esistenti
- MODE_ENABLE_WRITE_AHEAD_LOGGING: Flag di apertura del database. Quando è impostato, abilita la registrazione anticipata della scrittura per impostazione predefinita
Inizializzazione
Abbiamo bisogno di un editor per modificare e salvare le modifiche nelle preferenze condivise. Il codice seguente può essere utilizzato per ottenere le preferenze condivise.
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
Memorizzazione dei dati
editor.commit() viene utilizzato per salvare le modifiche alle preferenze condivise.
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
Recupero dei dati
I dati possono essere recuperati dalle preferenze salvate chiamando getString() come segue:
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
Cancellazione o eliminazione dei dati
remove(“nome_chiave”) viene utilizzato per eliminare quel valore particolare. clear() viene utilizzato per rimuovere tutti i dati
editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email
editor.commit(); // commit changes
editor.clear();
editor.commit(); // commit changes
Struttura del progetto
Codice del progetto delle preferenze condivise di Android
Il layout activity_main.xml
consiste di due viste EditText che memorizzano e mostrano il nome e l’email. I tre pulsanti implementano rispettivamente i loro onClicks nella 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>
Il file MainActivity.java
viene utilizzato per salvare e recuperare i dati tramite chiavi.
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) {
// Infla il menu; questo aggiunge elementi alla barra delle azioni se presente.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
mypreference è il nome del file dove la coppia chiave-valore delle preferenze condivise è memorizzata. L’immagine qui sotto mostra l’output finale del nostro progetto: Questo conclude il tutorial. Puoi scaricare il progetto Preferenze Condivise di Android dal link sottostante.
Scarica Esempio di Progetto delle Preferenze Condivise di Android
Source:
https://www.digitalocean.com/community/tutorials/android-shared-preferences-example-tutorial