Domanda

Ho un programma minimo che non fa altro che mi permetta di impostare due preferenze (un int e una stringa) utilizzando PreferenceActivity di Android. Così ho un file XML che definisce le mie preferenze, e un'attività che si estende PreferenceActivity. La mia attività principale ha un menu di opzioni che lancia mia attività preferenza. Tutto questo funziona alla grande. Posso impostare le mie preferenze ei valori vengono mantenuti durante e dopo i miei esegue programma.

Ora, nella mia attività principale che voglio recuperare tali preferenze. Dovrebbe essere facile, giusto? Ecco il codice da ogni campione che abbia mai visto:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int intSetting = prefs.getInt("intSetting", 0);
String strSetting = prefs.getString("strSetting", "");

Il problema è che, se rompo alla chiamata getInt() e scavalcare, il mio aspetto dello stack di questo tipo e l'applicazione sarà in crash se continuo:

  

Discussione [<3> principale] (sospeso)
  ActivityThread.performLaunchActivity (ActivityThread $ ActivityRecord,   Intent) Linea: 2494
  ActivityThread.handleLaunchActivity (ActivityThread $ ActivityRecord,   Intent) Linea: 2512
  ActivityThread.access $ 2200 (ActivityThread,   ActivityThread $ ActivityRecord, Intent)   line: 119
  ActivityThread $ H.handleMessage (Messaggio)   Linea: 1863
  ActivityThread $ H (Handler) .dispatchMessage (Messaggio)   line: 99 Looper.loop) Linea (: 123
  ActivityThread.main (String []) Linea:   4363 Method.invokeNative (Object,   Object [], Class, Class [], Classe, int,   booleano) Linea: non disponibile [native   Metodo] Method.invoke (oggetto,   L'oggetto ...) la linea: 521
  ZygoteInit $ MethodAndArgsCaller.run ()   line: 860 ZygoteInit.main (String [])   line: 618 NativeStart.main (String [])   Linea: non disponibile [metodo nativo]

Ho provato variazioni sul parametro passato a getDefaultSharedPreferences (), tra cui:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

... e probabilmente alcuni altri in contesto diverso (ad esempio quando si accede preferenze dalla mia attività principale contro un'altra attività contro una qualche funzione in una classe che non è un'attività. Il risultato è sempre lo stesso.

Ho letto una dozzina di domande e risposte messaggi su web da altri con questo problema che hanno risolto scrivendo il codice identico al mio, quindi non mi aspetto che ci sia una soluzione, ma se qualcuno ha qualche idea, fatemelo sapere.

È stato utile?

Soluzione

non mostrano l'analisi dello stack. L'Thread [<3> main] (Suspended) viene emesso inutile da Eclipse. È necessario esaminare la traccia vera stack, che si dovrebbe ottenere consentendo Android per passare alla finestra di dialogo "Forza Chiudi", poi guardando LogCat (nel vostro punto di vista DDMS) per l'analisi dello stack.

La mia ipotesi è che avete una preferenza chiamato intSetting ma non è un numero intero, ma che è solo una supposizione. A braccio, non riesco a pensare a una qualsiasi delle classi incorporate Preference che memorizzerà una preferenza intero, in quanto la maggior parte memorizzare le stringhe.

Il tuo modo di accedere al SharedPreferences di default (usando this) è corretto e non dovrebbe avere bisogno di essere cambiato.

Ecco un progetto di esempio che mostra l'utilizzo di PreferenceActivity e ottenere la parte posteriore SharedPreferences.

Altri suggerimenti

Solo per assicurarsi che:

  • In ti AndroidManifest si dovrebbe avere la Activity che si estende PreferenceActivity con qualcosa di simile:

  • Il Activity che si estende PreferenceActivity dovrebbe avere il seguente codice:

    @Override     protetta onCreate void (Bundle savedInstanceState) {         super.onCreate (savedInstanceState);         addPreferencesFromResource (R.layout.prefs);         }

dove R.layout.prefs è xml le preferenze.

Se avete fatto entrambe le cose, si prega di modificare la tua domanda con l'XML che si sta utilizzando in modo ppl in grado di riprodurre il problema.

Non potrebbe andare in crash, anche se la preferenza non è stata salvata, penso che vi siete persi un po 'di codice e l'incidente non viene da questo punto. Avete qualche altro thread?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top