2010-10-31 14 views
9

Essere nuovi nel mondo Android e avanzare con gioia giorno per giorno;) Vorrei condividere esempi sull'uso comune.Come utilizzare SharedPreferences come LocalStore, in modo più generico?

Ecco l'esempio sull'utilizzo di SharedPreferences con la classe LocalStore generica.

creare una classe comune da utilizzare per l'attività principale o per una qualsiasi attività secondaria.

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; 
    } 

    } 

Nota: È possibile utilizzare ObjectSerializer da here

Enjoy!

aggiornamento aggiuntive: Ho implementato una libreria da utilizzare MEMDISKCACHE e SHAREDPREF come GENERIC_STORE chiunque sia interessato può usarlo da
->https://github.com/wareninja/generic-store-for-android

+13

StackOverflow FAQ dice: "E 'anche perfettamente bene a chiedere e rispondere alla tua domanda, fintanto che fingi di essere su Jeopardy: pronunciala sotto forma di domanda. " –

+0

Potrebbe per favore rendere questa una domanda e una risposta appropriate invece di tutto ciò che è nel corpo della domanda. Altrimenti potrebbe essere cancellato. – Kev

+2

È carino da parte tua condividere :), ma penso che questo appartenga a un blog piuttosto che a un sito di domande e risposte. –

risposta

2

Supponendo che si desidera alcuni suggerimenti su come migliorarlo ancora di più, qui si partire.

  • Di solito Android segue una convenzione per mantenere la variabile Context come primo parametro. È buona pratica farlo quando si crea una libreria generale.
  • Se si desidera renderlo più generico, perché non provare il sovraccarico del metodo? Fornirà allo sviluppatore una maggiore flessibilità quando si impostano valori molto simili a come vengono gestiti gli extra nella classe Intent.

Ad esempio:

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(); 
    } 

Così si può semplicemente chiamare le funzioni sovraccaricate come questo:

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

Grazie! Buona risposta – user1755546

Problemi correlati