L'Écriture De Classe Singleton Pour Gérer Android SharedPreferences

je suis en train d'écrire une classe singleton pour superviser toutes les opérations impliquant des préférences partagées.

J'ai 3 fichiers de préférences, général, paramètres, et temp

Je veux être en mesure d'utiliser cette classe pour écrire une préférence d'un type donné, par exemple:

stg_full_screen: true //as boolean

C'est ce que j'ai fait jusqu'à présent:

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
public class SharedPrefManager extends Activity {
//Globals
private int GENERAL             = 1000;
private int SETTINGS            = 2000;
private int TEMP_STORE          = 3000;
private String PREF_GENERAL     = "com.example.general";
private String PREF_SETTINGS    = "com.example.settings";
private String PREF_TEMP_STORE  = "com.example.temp_store";
private SharedPreferences general;
private SharedPreferences settings;
private SharedPreferences tempStore;
private SharedPreferences.Editor general_editor;
private SharedPreferences.Editor settings_editor;
private SharedPreferences.Editor temp_store_editor;
//Instantiate singleton object
private static SharedPrefManager ourInstance = new SharedPrefManager();
public static SharedPrefManager getInstance() { return ourInstance; }
private SharedPrefManager() {
//Get handle on all preference files
general   = getSharedPreferences(PREF_GENERAL, Context.MODE_PRIVATE);
settings  = getSharedPreferences(PREF_SETTINGS, Context.MODE_PRIVATE);
tempStore = getSharedPreferences(PREF_TEMP_STORE, Context.MODE_PRIVATE);
//provision editors for all preference files
general_editor    = general.edit();
settings_editor   = settings.edit();
temp_store_editor = tempStore.edit();
}
private String read_prefs (String pref_name) {
//this method reads a preference and returns it
//ideally, i would want to be able to return appropriate types by request
//e.g boolean, string
return null;
}
private void write_prefs (String pref_name, String pref_val) {
//this method would take a preference and write the appropriate type to prefs
}
//this method determines where to put a preference by checking the name of the key
//this works because i use the following naming conventions
//stg_name for settings, tmp_name for all that goes into tempStore
private String resolve_pref_category (String path) {
if (path.startsWith("stn"))         return PREF_SETTINGS;
else if (path.startsWith("tmp"))    return PREF_TEMP_STORE;
else                                return PREF_GENERAL;
}
}

Ma question est:

  1. Est-ce une chose sage à faire?
  2. Comment puis-je déterminer efficacement le type d'une préférence?

Grâce

"Est-ce une chose sage à faire?" - NON! Le Android Activity classe est un cas particulier de la classe Java et vous ne devez pas créer de static champs ou de méthodes et de s'attendre à des choses à travailler. Un Activity est conçu comme un framework d'INTERFACE - en d'autres termes, si vous n'avez pas besoin d'une INTERFACE, puis ne pas utiliser un Activity. Par tous les moyens, de créer une classe qui étend SharedPreferences fonctionnalités mais ne le faites pas avec un Activity.
Je vous recommande fortement de regarder dans AndroidAnnotations -- je suis un grand fan de leur élégant partagé préférences de gestion. Il semble que vous essayez de faire, mais avec presque aucun code n'est requis.
AndroidAnnotations a l'air vraiment intéressant, je me demande juste si il y a tout connu inconvénients? Je n'ai pas pris assez profond regard, donc ne sais pas comment il fonctionne, donc je vous serais reconnaissant de tout haut niveau idées dans ce domaine. Merci
Je l'ai utilisé sur quelques projets, aucun des inconvénients que je peux voir. Il génère un code basé sur les annotations, que certaines personnes n'aiment pas, mais il fonctionne en douceur et le mode de génération de code signifie qu'aucune exécution des performances. Leur gestion du partage des préférences est génial et permet de réduire le temps qu'il faut pour écrire du code comme vous le mentionnez. C'est certainement la peine d'essayer.
merci, j'aime ce que je vois, je crois que je suis accro 🙂

OriginalL'auteur T. Rex | 2013-10-26