Autore Topic: Shared Preference Globali  (Letto 800 volte)

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Shared Preference Globali
« il: 31 Ottobre 2011, 17:30:55 CET »
0
Ciao,
sto tentando di fare questa operazione:

1-Ho una classe dove implemento le shared preferences per poterle utilizzare in tutto il progetto
2-Ho l'activity dove uso la classe al punto 1 per prelevare e salvare le shared preferences.

Ma purtroppo ho un errore nella classe al punto 1

Vi posto prima la classe al punto 1,dove ci sono i metodi per caricare e salvare le shared:
Codice: [Seleziona]
public class clsSharedPreference
        {
                private static final String        PREFERENCE_FILENAME        = "MyPrefs";

                private SharedPreferences        settings;
                private Editor                                prefEditor;

                // Proprietà
                String                                                _lingua;
                String                                                _difficolta;

                public clsSharedPreference(Context context)
                        {
                                Log.i("SHARED", "01" );
                                this.settings = context.getSharedPreferences(
                                                PREFERENCE_FILENAME, Activity.MODE_PRIVATE);
                                this.prefEditor = settings.edit();
                                Log.i("SHARED", "02" );
                        }

                // Preferenze da ritornare
                public String getLivello()
                        {
                                return settings.getString("livello", "");
                        }

                public String getLingua()
                        {
                                return settings.getString("lingua", "");
                        }
               
                //Salvo preferenze
                public void savePreferences()
                        {
                                prefEditor.putString("livello", _difficolta);
                                prefEditor.putString("lingua", _lingua);
                                prefEditor.commit();
                        }
               
                //Carico preferenze
                public void LoadPreferences()
                        {
                                _difficolta=settings.getString("livello","");
                                _lingua=settings.getString("lingua","");
                               
                        }

        }

L'errore si veriifca qui:
Codice: [Seleziona]
this.settings = context.getSharedPreferences(PREFERENCE_FILENAME, Activity.MODE_PRIVATE);


Qui invece c'è un pezzo di codice dove richiamo la classe al punto 1, gli passo il contesto:
Codice: [Seleziona]
protected clsSharedPreference        appPrefs= new clsSharedPreference(getApplicationContext());

Qui il logcat:
Codice (XML): [Seleziona]
10-31 16:16:40.318: E/AndroidRuntime(287): FATAL EXCEPTION: main
10-31 16:16:40.318: E/AndroidRuntime(287): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{luigi.android.it/luigi.android.it.ManageSharedPreferences}: java.lang.NullPointerException
10-31 16:16:40.318: E/AndroidRuntime(287):      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
10-31 16:16:40.318: E/AndroidRuntime(287):      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
10-31 16:16:40.318: E/AndroidRuntime(287):      at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-31 16:16:40.318: E/AndroidRuntime(287):      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-31 16:16:40.318: E/AndroidRuntime(287):      at android.os.Handler.dispatchMessage(Handler.java:99)
10-31 16:16:40.318: E/AndroidRuntime(287):      at android.os.Looper.loop(Looper.java:123)
10-31 16:16:40.318: E/AndroidRuntime(287):      at android.app.ActivityThread.main(ActivityThread.java:4627)
10-31 16:16:40.318: E/AndroidRuntime(287):      at java.lang.reflect.Method.invokeNative(Native Method)
10-31 16:16:40.318: E/AndroidRuntime(287):      at java.lang.reflect.Method.invoke(Method.java:521)
10-31 16:16:40.318: E/AndroidRuntime(287):      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-31 16:16:40.318: E/AndroidRuntime(287):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-31 16:16:40.318: E/AndroidRuntime(287):      at dalvik.system.NativeStart.main(Native Method)
10-31 16:16:40.318: E/AndroidRuntime(287): Caused by: java.lang.NullPointerException
10-31 16:16:40.318: E/AndroidRuntime(287):      at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
10-31 16:16:40.318: E/AndroidRuntime(287):      at luigi.android.it.clsSharedPreference.<init>(clsSharedPreference.java:23)
10-31 16:16:40.318: E/AndroidRuntime(287):      at luigi.android.it.ManageSharedPreferences.<init>(ManageSharedPreferences.java:18)
10-31 16:16:40.318: E/AndroidRuntime(287):      at java.lang.Class.newInstanceImpl(Native Method)
10-31 16:16:40.318: E/AndroidRuntime(287):      at java.lang.Class.newInstance(Class.java:1429)
10-31 16:16:40.318: E/AndroidRuntime(287):      at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
10-31 16:16:40.318: E/AndroidRuntime(287):      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)

Grazie.
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Zate

  • Visitatore
Re:Shared Preference Globali
« Risposta #1 il: 31 Ottobre 2011, 17:54:58 CET »
0
I parametri non dovrebbero essere una stringa e un intero?
Hai provato a mettere uno 0 al posto di Activity.MODE_PRIVATE?

(Spero di non aver detto una cavolata :S)

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Shared Preference Globali
« Risposta #2 il: 31 Ottobre 2011, 18:52:28 CET »
0
Sono uno scellerato  o_O

Giustamente mi va in errore, questa istruzione
Codice: [Seleziona]
protected clsSharedPreference        appPrefs= new clsSharedPreference(getApplicationContext());
L'avevo messa in testa all'activity,mentre dovevo metterla dopo la Oncreate.
Ed inoltre quello che ho postato non poteva aiutarmi perchè voi non sapevate la posizione dell'istruzione dove era posizionata. :'(
Comunque mettendola dopo l'oncreate funziona.
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline ptbaileys

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Mac OSX Lion, Ubuntu, Windows xp, Windows 7, Fedora
Re:Shared Preference Globali
« Risposta #3 il: 22 Febbraio 2012, 13:53:36 CET »
0
02-22 13:49:43.039: E/AndroidRuntime(22375): FATAL EXCEPTION: main
02-22 13:49:43.039: E/AndroidRuntime(22375): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{io.tsc.app/io.tsc.app.LinguaListActivity}: java.lang.NullPointerException
02-22 13:49:43.039: E/AndroidRuntime(22375):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2703)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2797)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at android.app.ActivityThread.access$2300(ActivityThread.java:135)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2132)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at android.os.Looper.loop(Looper.java:143)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at android.app.ActivityThread.main(ActivityThread.java:4914)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at java.lang.reflect.Method.invokeNative(Native Method)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at java.lang.reflect.Method.invoke(Method.java:521)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at dalvik.system.NativeStart.main(Native Method)
02-22 13:49:43.039: E/AndroidRuntime(22375): Caused by: java.lang.NullPointerException
02-22 13:49:43.039: E/AndroidRuntime(22375):    at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:100)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at io.pat.app.LinguaListActivity.<init>(LinguaListActivity.java:200)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at java.lang.Class.newInstanceImpl(Native Method)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at java.lang.Class.newInstance(Class.java:1429)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at android.app.Instrumentation.newActivity(Instrumentation.java:1033)
02-22 13:49:43.039: E/AndroidRuntime(22375):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2695)
02-22 13:49:43.039: E/AndroidRuntime(22375):    ... 11 more

facendo come dici, a me esce errore non appena provo ad entrare nell'activity dove sono utilizzati gli sharedpreferences. Ho messo nella class globale:

                import android.app.Activity;
                import android.content.Context;
               import android.content.SharedPreferences;
               import android.content.SharedPreferences.Editor;
               import android.util.Log;

public class ImpostazioniGlobali{
   
   
   private final static String CHIAVE_GLOBALE= "PAT_KEY";
   private SharedPreferences SharedPrefGlob;
   private Editor SharedPrefGlobEditor;

private final static String MADRE_L_KEY = "MADRE_PAT_KEY";
       
                public ImpostazioniGlobali(Context context){
         this.SharedPrefGlob = context.getSharedPreferences(CHIAVE_GLOBALE, Activity.MODE_PRIVATE);
         this.SharedPrefGlobEditor = SharedPrefGlob.edit();
      }
      public String getLinguaMadre(){return SharedPrefGlob.getString(MADRE_L_KEY, "NO");}
      public void setLinguaMadre(String x){
         SharedPrefGlobEditor.putString(MADRE_L_KEY, x);
         SharedPrefGlobEditor.commit();
      }
                .....


nella mia activity chiamata attraverso il click su un button ho messo:

import io.pat.app.sharedpreferencesglobali.ImpostazioniGlobali;
....
public class LinguaListActivity extends Activity {
...
@Override
    public void onCreate(Bundle savedInstanceState) {
    ...
   }
private ImpostazioniGlobali PatPrefs= new ImpostazioniGlobali(getApplicationContext());
...

le chiamate sonocostituite cosi quando mi serve il set o il get sullo sharedpreferences:
PatPrefs.setLinguaMadre(linguaMadre);
String lingua_madre = PatPrefs.getLinguaMadre();

Mi aiutate per favore?
« Ultima modifica: 22 Febbraio 2012, 13:56:02 CET da ptbaileys »