In questo articolo vedremo come poter salvare alcune impostazione relative alla nostra app.
In tutte le app che abbiamo nel nostro dispositivo, è capitato di dover impostare alcuni parametri in modo che ogni volta che l'app viene aperta, utilizza l'impostazione salvata. Ad esempio nell'applicazione della fotocamera si può impostare la qualità dell'immagine, la destinazione del file, ecc. Nell'app di gestione delle mail è possibile impostare una suoneria dedicata alle mail, la firma nei messaggi e tante altre impostazioni.
N.B. Questa guida è valida solamente se la nostra app ha solo un' Activity.
Queste impostazioni è possibile memorizzarle all'interno della propria app utilizzando SharedPreferences
SharedPreferences non richiede autorizzazioni particolari in quanto i dati vengono memorizzati all'interno di file nella posizione di installazione dell'app.
In questo esempio vedremo come memorizzare la scelta di un RadioButton che simula una qualsiasi impostazione che vogliamo applicare alla nostra app.
Ecco come si presenta il file activity_main.xml
Ora passiamo al codice, SharedPreferences è suddiviso in due parte una di salvataggio e una di lettura.
Il salvataggio di SharedPreferences serve per memorizzare un valore di tipo numerico, stringa o booleano e deve essere eseguito in questo modo:
Mentre la lettura del valore salvato in SharedPreferences deve essere eseguita in questo modo:
Queste righe di codice che permettono la lettura di SharedPreferences devono essere inserite all'interno della funzione onCreate()
Vediamo ora queste righe di codice all'interno dell' esempio
Ecco come si presenta il file MainActivity.kt
Come si può vedere le righe di codice che eseguono il salvataggio e la lettura sono state inserite all'interno di due funzioni ripettivamente saveData() in modo da poter essere richiamata in diversi punti del codice e onCreate().
saveData() viene richiamata ogni volta che si clicca su un RadioButton in modo da memorizzare la scelta fatta.
Le righe di codice che permettono la lettura sono state inserite all'interno della funzione onCreate() e subito dopo viene eseguita la funzione loadData per applicare l'impostazione all'interno dell'app; in questo caso la selezione del RadioButton.
Ecco un video dimostrativo
In tutte le app che abbiamo nel nostro dispositivo, è capitato di dover impostare alcuni parametri in modo che ogni volta che l'app viene aperta, utilizza l'impostazione salvata. Ad esempio nell'applicazione della fotocamera si può impostare la qualità dell'immagine, la destinazione del file, ecc. Nell'app di gestione delle mail è possibile impostare una suoneria dedicata alle mail, la firma nei messaggi e tante altre impostazioni.
N.B. Questa guida è valida solamente se la nostra app ha solo un' Activity.
Queste impostazioni è possibile memorizzarle all'interno della propria app utilizzando SharedPreferences
SharedPreferences non richiede autorizzazioni particolari in quanto i dati vengono memorizzati all'interno di file nella posizione di installazione dell'app.
In questo esempio vedremo come memorizzare la scelta di un RadioButton che simula una qualsiasi impostazione che vogliamo applicare alla nostra app.
Ecco come si presenta il file activity_main.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<LinearLayout | |
xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
tools:context=".MainActivity"> | |
<RadioGroup | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" > | |
<RadioButton | |
android:id="@+id/radioButton1" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:text="Scelta 1" /> | |
<RadioButton | |
android:id="@+id/radioButton2" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:text="Scelta 2" /> | |
<RadioButton | |
android:id="@+id/radioButton3" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:text="Scelta 3" /> | |
<RadioButton | |
android:id="@+id/radioButton4" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:text="Scelta 4" /> | |
</RadioGroup> | |
</LinearLayout> |
Il salvataggio di SharedPreferences serve per memorizzare un valore di tipo numerico, stringa o booleano e deve essere eseguito in questo modo:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//dichiarazione di SharedPreferences in modalita privata (solo l'app può accedervi) | |
val sharedPref: SharedPreferences = getPreferences(Context.MODE_PRIVATE) | |
//dichiarazione di voler modificare le SharedPreferences | |
val editor = sharedPref.edit() | |
//modifica della chiave "NOME_CHIAVE" con il valore della variabile nome_variabile | |
editor.putInt("NOME_CHIAVE", nome_variabile) | |
//applicazione (salvataggio) delle modifiche | |
editor.apply() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*recupero della scelta salvata, | |
* questa viene eseguita leggendo una chiave dal nome "PREF_RBN" con valore di default uguale a zero*/ | |
val sharedPref: SharedPreferences = getPreferences(Context.MODE_PRIVATE) | |
/*impostazione della variabile nome_variabile in base al valore salvato all'interno | |
* della chiave "NOME_CHIAVE"*/ | |
nome_variabile = sharedPref.getInt("NOME_CHIAVE", 0) |
Vediamo ora queste righe di codice all'interno dell' esempio
Ecco come si presenta il file MainActivity.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.dm.tutorialsharedpreferences | |
import android.content.Context //importazione della Classe: Context | |
import android.content.SharedPreferences //importazione della Classe: SharedPreferences | |
import androidx.appcompat.app.AppCompatActivity | |
import android.os.Bundle | |
import android.widget.Toast | |
import kotlinx.android.synthetic.main.activity_main.* | |
class MainActivity : AppCompatActivity() { | |
private var radioChecked: Int? = 0 | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_main) | |
/*recupero della scelta salvata, | |
* questa viene eseguita leggendo una chiave dal nome "PREF_RBN" con valore di default uguale a zero*/ | |
val sharedPref: SharedPreferences =getPreferences(Context.MODE_PRIVATE) | |
/*impostazione della variabile radioChecked in base al valore salvato all'interno | |
* della chiave "PREF_RBN"*/ | |
radioChecked = sharedPref.getInt("PREF_RBN", 0) | |
/*chiamata alla funzione che permette di applicare l'impostazione in base al valore della | |
*variabile salvata*/ | |
loadData() | |
} | |
override fun onResume() { | |
super.onResume() | |
radioButton1.setOnClickListener { | |
//impostazione della variabile da salvare | |
radioChecked = 1 | |
//chiamata alla funzione che permette il salvataggio della variabile nelle SharedPreferences | |
storeData() | |
Toast.makeText(this, "Scelta "+ radioChecked + " memorizzata", Toast.LENGTH_LONG).show() | |
} | |
radioButton2.setOnClickListener { | |
//impostazione della variabile da salvare | |
radioChecked = 2 | |
//chiamata alla funzione che permette il salvataggio della variabile nelle SharedPreferences | |
storeData() | |
Toast.makeText(this, "Scelta "+ radioChecked + " memorizzata", Toast.LENGTH_LONG).show() | |
} | |
radioButton3.setOnClickListener { | |
//impostazione della variabile da salvare | |
radioChecked = 3 | |
//chiamata alla funzione che permette il salvataggio della variabile nelle SharedPreferences | |
storeData() | |
Toast.makeText(this, "Scelta "+ radioChecked + " memorizzata", Toast.LENGTH_LONG).show() | |
} | |
radioButton4.setOnClickListener { | |
//impostazione della variabile da salvare | |
radioChecked = 4 | |
//chiamata alla funzione che permette il salvataggio della variabile nelle SharedPreferences | |
storeData() | |
Toast.makeText(this, "Scelta "+ radioChecked + " memorizzata", Toast.LENGTH_LONG).show() | |
} | |
} | |
/*funzione che esegue l'applicazione dell'impostazione in base al valore della | |
* variabile salvata*/ | |
private fun loadData(){ | |
when(radioChecked) | |
{ | |
0 ->{ | |
//inserire qui il codice da eseguire se non è presente alcun valore memorizzato | |
Toast.makeText(this,"Nessuna scelta memorizzata", Toast.LENGTH_LONG).show() | |
} | |
1 ->{ | |
//inserire qui il codice da eseguire se la scelta memorizzata è uguale a 1 | |
radioButton1.isChecked = true | |
Toast.makeText(this, "Scelta "+ radioChecked, Toast.LENGTH_LONG).show() | |
} | |
2 ->{ | |
//inserire qui il codice da eseguire se la scelta memorizzata è uguale a 2 | |
radioButton2.isChecked = true | |
Toast.makeText(this, "Scelta "+ radioChecked, Toast.LENGTH_LONG).show() | |
} | |
3 ->{ | |
//inserire qui il codice da eseguire se la scelta memorizzata è uguale a 3 | |
radioButton3.isChecked = true | |
Toast.makeText(this, "Scelta "+ radioChecked, Toast.LENGTH_LONG).show() | |
} | |
else ->{ | |
//inserire qui il codice da eseguire se la scelta memorizzata è uguale a 4 | |
radioButton4.isChecked = true | |
Toast.makeText(this, "Scelta "+ radioChecked, Toast.LENGTH_LONG).show() | |
} | |
} | |
} | |
/*funzione che esegue il salvataggio della scelta, | |
* questa viene eseguita salvando una chiave dal nome "PREF_RBN" con il valore di radioChecked*/ | |
private fun storeData(){ | |
//dichiarazione di SharedPreferences in modalita privata (solo l'app può accedervi) | |
val sharedPref: SharedPreferences = getPreferences(Context.MODE_PRIVATE) | |
//dichiarazione di voler modificare le SharedPreferences | |
val editor = sharedPref.edit() | |
//modifica della chiave "PREF_RBN" con il valore della variabile radioChecked | |
editor.putInt("PREF_RBN", radioChecked!!.toInt()) | |
//applicazione (salvataggio) delle modifiche | |
editor.apply() | |
} | |
} |
saveData() viene richiamata ogni volta che si clicca su un RadioButton in modo da memorizzare la scelta fatta.
Le righe di codice che permettono la lettura sono state inserite all'interno della funzione onCreate() e subito dopo viene eseguita la funzione loadData per applicare l'impostazione all'interno dell'app; in questo caso la selezione del RadioButton.
Ecco un video dimostrativo
Download Project | ![]() |
Download file APK | ![]() |
Commenti
Posta un commento