Autore Topic: null object reference  (Letto 311 volte)

Offline wlf

  • Utente normale
  • ***
  • Post: 367
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
null object reference
« il: 16 Giugno 2015, 12:57:58 CEST »
0
Salve ragazzi, in esecuzione, raramente, mi capita l'errore sottostante:

Codice: [Seleziona]
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)' on a null object reference
Indagando ho verificato che è dovuto al fatto che l'istanza delle sharedPreference in alcune condizioni viene persa.

Ho una activity dei settings nella quale dichiaro il mio oggetto sharedPref e lo referenzio nella onCreate:

Codice: [Seleziona]
private static SharedPreferences sharedPref;
Codice: [Seleziona]
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                sharedPref = PreferenceManager.getDefaultSharedPreferences(this);

... poi lo utilizzo dentro alla PreferenceFragment:

Codice: [Seleziona]
if (sharedPref.getString("mykey", "") != null)
Se utilizzo l'App in modo normale non mi da alcun errore; se invece apro le impostazioni e poi parcheggio l'App e faccio partire altre decine d'App voraci di memoria può accadere che riaprendo l'App quando viene eseguita la getString() l'App vada in errore perché sharedPref non è più referenziato, quindi valendo null viene dato l'errore sopra citato. :(

A mio parere questo è dovuto al fatto che quando Android ne ha la necessità mi fa un destroy dell'activity; alla successiva ripartenza mi viene fatta una create ma sempre a mio parere non viene distrutta la preferenceFragment quindi questa poi utilizza una variabile referenziata la prima volta che è stata distrutta dalla memoria, non quella nuova referenziata nuovamente.

Qualcuno ha idea se le mie supposizioni sono corrette e casomai ha pure dei consigli su come intervenire per fare in modo che venga utilizzata la nuova sharedPref referenziata?

Grazie.