2010-10-31 33 views
9

Être nouveau dans le monde Android et avancer avec joie jour après jour;) Je voudrais partager des exemples sur l'utilisation courante.Comment utiliser SharedPreferences comme LocalStore, de manière plus générique?

Voici un exemple d'utilisation de SharedPreferences avec une classe LocalStore générique.

créer une classe commune à utiliser par votre activité principale ou par une sous-activité.

public class LocalStore { 

     private static final String TAG = "LocalStore"; 
     private static final String PREF_FILE_NAME = "userprefs"; 

     public static void clear(Context context) { 
      clear(context, "unknown"); 
     } 
     public static void clear(Context context, String caller) { 
      Editor editor = 
       context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit(); 
      editor.clear(); 
      editor.commit(); 
      Log.d(TAG, "caller:"+caller + "|clear LocalStore"); 
     } 

     public static boolean setCustomBooleanData(String key, boolean value, Context context) { 
     Editor editor = 
      context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit(); 
     editor.putBoolean(key, value); 

     return editor.commit(); 
    } 
    public static boolean getCustomBooleanData(String key, Context context) { 
     SharedPreferences savedSession = 
      context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); 

     return (savedSession.getBoolean(key, false)); 
    } 

    public static boolean setCustomStringData(String key, String value, Context context) { 
     Editor editor = 
      context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit(); 
     editor.putString(key, value); 

     return editor.commit(); 
    } 
    public static String getCustomStringData(String key, Context context) { 
     SharedPreferences savedSession = 
      context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); 

     return (savedSession.getString(key, null)); 
    } 


    public static boolean isCustomStringExistInLocal(String customKey, Context context) { 
     SharedPreferences savedSession = 
      context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); 

     return (savedSession.getString(customKey, null))==null?false:true; 
    } 

public static boolean saveObject(String objKey, Serializable dataObj, Context context) { 
     Editor editor = 
      context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit(); 
     editor.putString(objKey, ObjectSerializer.serialize(dataObj)); 

     Log.d(TAG, "savedObject| objKey:"+objKey+"/" + dataObj.toString()); 

     return editor.commit(); 
    } 
    public static Object getObject(String objKey, Context context) { 
     SharedPreferences savedSession = 
      context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); 

     Object dataObj = ObjectSerializer.deserialize(savedSession.getString(objKey, null)); 

     return dataObj; 
    } 

    } 

Note: Vous pouvez utiliser ObjectSerializer de here

Amusez-vous!

Mise à jour supplémentaire: I mis en œuvre une bibliothèque à utiliser MEMDISKCACHE et SHAREDPREF comme GENERIC_STORE toute personne intéressée peut l'utiliser de
->https://github.com/wareninja/generic-store-for-android

+13

StackOverflow FAQ dit: "Il est aussi parfaitement bien de poser et de répondre à votre question, tant que vous prétendez être en péril: exprimez-le sous la forme d'une question. –

+0

Pourriez-vous s'il vous plaît en faire une bonne question et répondre au lieu de tout être dans le corps de la question. Sinon, il peut être supprimé. – Kev

+2

C'est gentil à vous de partager :), mais je pense que cela appartient à un blog plutôt qu'à un site de questions et réponses. –

Répondre

2

En supposant que vous voulez quelques conseils sur la façon d'améliorer encore plus, ici vous aller.

  • Habituellement, Android suit une convention pour conserver la variable Context comme premier paramètre. C'est une bonne pratique de le faire lors de la création d'une bibliothèque générale.
  • Si vous voulez le rendre plus générique, pourquoi ne pas essayer une surcharge de méthode? Cela donnera au développeur plus de flexibilité lors de la définition de valeurs, comme la façon dont les extras sont traités dans la classe Intent.

Par exemple:

public static boolean setData(Context, String key, boolean value) { 
     Editor editor = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit(); 
     editor.putBoolean(key, value); 
     return editor.commit(); 
    } 
public static boolean setData(Context, String key, String value) { 
     Editor editor = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit(); 
     editor.putString(key, value); 
     return editor.commit(); 
    } 

Vous pouvez simplement appeler les fonctions surchargées comme celui-ci:

setData(this, "myBoolean", true); 
setData(this, "myString", "Its Awesome"); 
+1

Merci! Bonne réponse – user1755546