La gestione delle shared preference in Android consente nativamente di gestire agevolmente le preferenze utente all'interno di un'applicazione. Kripton viene a supporto di
questo meccanismo di persistenza dell'informazione fornendo una maggiore robustezza del codice necessario a recuperare e modificare tali preferenze per via programmatica.
Prendiamo le shared preference del nostro progetto d'esempio.
Il codice xml
che definisce tale interfaccia è il seguente:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreference
android:defaultValue="true"
android:key="example_switch"
android:summary="@string/pref_description_social_recommendations"
android:title="@string/pref_title_social_recommendations" />
<EditTextPreference
android:capitalize="words"
android:defaultValue="@string/pref_default_display_name"
android:inputType="textCapWords"
android:key="example_text"
android:maxLines="1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="@string/pref_title_display_name" />
<ListPreference
android:defaultValue="-1"
android:entries="@array/pref_example_list_titles"
android:entryValues="@array/pref_example_list_values"
android:key="example_list"
android:negativeButtonText="@null"
android:positiveButtonText="@null"
android:title="@string/pref_title_add_friends_to_messages" />
</PreferenceScreen>
Per accedere a queste informazioni mediante la classe SharedPreference
presente nell'SDK di Android bisognerebbe scrivere un codice simile a questo:
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String exampleName = prefs.getString("example_text", "No name defined");
boolean exampleSwitch = prefs.prefs.getBoolean("example_switch", false);
Con Kripton, queste impostazioni potrebbero venire rappresentate da una classe tipo:
@BindSharedPreferences
public class EsempioSharedPreferences {
public boolean exampleSwitch;
public String exampleText;
public String exampleList;
}
Grazie all'annotazione @BindSharedPreferences
Kripton genererà per noi il codice necessario ad accedere più agevolmente allo SharedPreference
dell'applicazione, consentendo trasformare il codice visto prima in:
BindEsempioSharedPreferences sp=BindEsempioSharedPreferences.instance().refresh();
String exampleText = sp.exampleText();
boolean exampleSwitch = sp.exampleSwitch();
Il vantaggio rispetto al codice visto in precedenza è che l'accesso alle preferenze non avviene più mediante mappa, ma mediante un accesso tipizzato. Invece di leggere un attributo
per volta è possibile leggere interamente dallo shared preferences
:
EsempioSharedPreferences bean=BindEsempioSharedPreferences.instance().read();
String exampleText = bean.exampleText;
boolean exampleSwitch = bean.exampleSwitch;
Data una classe ExampleSharedPreference
, Kripton genererà il codice necessario in BindExampleSharedPreference
, ovvero una classe che ha il nome della
classe originaria con il prefisso Bind
. Anche in questo caso Kripton supporta diversi tipi di dati: stringhe, interi, collezioni, byte ed oggetti complessi. Tutto
quello che non direttamente
salvabile viene convertito nel sua rappresentazione JSON e poi salvato come stringa.
Ovviamente questo tipo di attributi non può essere utilizzato con i componenti standard per
la gestione delle preference,
ma può risultare utile nel caso in cui si necessiti o si voglia definire dei propri componenti per esse. Per poter utilizzare l'annotazione @BindSharedPreferences
è necessario che il nome della classe termini con SharedPreferences
.
Kripton, come abbiamo detto, è un progetto open source ospitato su GitHub.com. Esso è disponibile al seguente link.
Nel progetto
d'esempio associato a questa sezione è presente del codice che illustra l'uso di Kripton per
persistenza mediante SQLite e le SharedPreferences.