Autore Topic: SharedPreferences da metodo static  (Letto 1106 volte)

Offline straken76

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy
  • Sistema operativo:
    Linux Fedora
SharedPreferences da metodo static
« il: 18 Marzo 2010, 16:53:15 CET »
0
Ciao!
Ho una domanda anche se credo di sapere già la risposta... è possibile accedere in lettura (e magari anche in scrittura) alle SharedPrefeneces da metodo static? Mi sa che la risposta è no...

In pratica sto cercando di creare una classe statica che definisce se scrivere o meno informazioni di debug per una applicazione formata da diverse activity e classi. In pratica quando devo scrivere un log vorrei eseguire qualcosa del tipo

Codice (Java): [Seleziona]
if (WidgetDebug.debuggable()) {
   Log.i(LOG_TAG,"Messaggio");
}

L'utilizzo del metodo statico è stato molto utile. Ora però vorrei rendere configurabile il comportamento a runtime, in modo che in caso di problemi io (o un utente avanzato) possa attivare il debug verboso per capire cosa accade. Pensavo a qualcosa del tipo:

Codice (Java): [Seleziona]
public static boolean debuggable() {
   if (!configurata) {
      config = Context.getSharedPreferences(NOME_PREF, 0);
         // qui leggo la preferenza utente e setto la variabile statica DO_DEBUG
         configurata = true;
      }
      return DO_DEBUG;
}

peccato che getSharedPreferences non sia utilizzabile in un metodo static, e renderlo non static complicherebbe inutilmente il codice di debug... qualche idea alternativa?

Grazie!
« Ultima modifica: 15 Maggio 2010, 17:26:04 CEST da JD »

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:SharedPreferences da metodo static
« Risposta #1 il: 21 Marzo 2010, 17:39:20 CET »
0
il metodo

Codice (Java): [Seleziona]
Context.getSharedPreferences(NOME_PREF, 0);
come lo stai chiamando tu, quindi come se fosse un metodo statico della classe Context, non esiste.


questo metodo deve essere chiamato su un oggetto! quindi quando istanzi il tuo oggetto widgetDebug, prova a passare al costruttore il  context.
quindi salvalo come campo statico nella classe di debug. a questo punto potrai chiamare getSharedPreference su questo oggetto all interno di un metodo statico


Saluti
Qlimax
« Ultima modifica: 21 Marzo 2010, 18:07:07 CET da JD »

Offline straken76

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy
  • Sistema operativo:
    Linux Fedora
Re:SharedPreferences da metodo static [RISOLTO]
« Risposta #2 il: 23 Marzo 2010, 08:59:32 CET »
0
Grazie Qlimax
Dopo il tuo suggerimento ho pensato un po' e ho trovato una soluzione... leggermente diversa ma funzionale. La riporto nel caso possa servire anche ad altre persone:

Codice (Java): [Seleziona]
public class WidgetDebug {

        private static boolean DO_DEBUG = false;
       
        public static final boolean DEF_DEBUG = false;
        public static final String CAMPO_DEBUG = "debug_app";
       
        public static void initDebug(Context ctx) {
                SharedPreferences pref = ctx.getSharedPreferences(WidgetConfigurator.NOME_PREF, 0);
                DO_DEBUG = pref.getBoolean(CAMPO_DEBUG, DEF_DEBUG);
        }

        public static boolean debuggable() {
                return DO_DEBUG;
        }
       
}

a questo punto è sufficiente che nell'update del widget chiamo il metodo statico initDebug passando il contesto e poi ogni volta che mi serve verificare il livello di log faccio la chiamata statica

Codice (Java): [Seleziona]
if (WidgetDebug.debuggable())  {
   // codice di debug
}