Question

J'ai un programme minimal qui ne fait guère plus que de me laisser programmer deux (un int et une chaîne) en utilisant la PreferenceActivity Android. J'ai donc un fichier xml qui définit mes préférences, et une activité qui s'étend PreferenceActivity. Mon activité principale a un menu d'options qui lance mon activité de préférence. Tout cela fonctionne très bien. Je peux définir mes préférences et les valeurs sont conservées pendant et après mon programme exécute.

Maintenant, dans mon activité principale je veux récupérer ces préférences. Devrait être facile, non? Voici le code de chaque échantillon que j'ai jamais vu:

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

Le problème est, si je casse à l'appel getInt() et un pas sur, ma pile ressemble à ceci et l'application se bloque si je continue:

  

Discussion [<3> principal] (suspendu)
  ActivityThread.performLaunchActivity (ActivityThread $ ActivityRecord,   Intention) Ligne: 2494
  ActivityThread.handleLaunchActivity (ActivityThread $ ActivityRecord,   Intention) Ligne: 2512
  ActivityThread.access 2200 $ (ActivityThread,   ActivityThread $ ActivityRecord, intention)   ligne: 119
  ActivityThread $ H.handleMessage (Message)   ligne: 1863
  ActivityThread $ H (gestionnaire) .dispatchMessage (Message)   ligne: 99 Looper.loop ligne (): 123
  ActivityThread.main ligne (String []):   4363 Method.invokeNative (Object,   Object [], classe, classe [], classe, int,   Boolean) ligne: non disponible [native   Procédé] Method.invoke (Object,   ligne d'objets ...): 521
  ZygoteInit $ MethodAndArgsCaller.run ()   ligne: 860 ZygoteInit.main (String [])   ligne: 618 NativeStart.main (String [])   ligne: non disponible [méthode native]

J'ai essayé des variations sur le paramètre passé à getDefaultSharedPreferences (), y compris:

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

... et probablement d'autres dans un contexte différent (par exemple lors de l'accès des préférences de mon activité principale par rapport à une autre activité par rapport à une fonction dans une classe qui n'est pas une activité. Le résultat est toujours le même.

J'ai lu une douzaine de questions et réponses messages sur le Web des autres avec ce problème qui ont résolu par l'écriture de code identique à la mienne, donc je ne pense pas qu'il y ait une solution, mais si quelqu'un a des idées, laissez-moi savoir.

Était-ce utile?

La solution

Vous ne montre pas la trace de la pile. Le Thread [<3> main] (Suspended) est inutile de sortie Eclipse. Vous devez examiner la vraie trace de la pile, que vous devriez obtenir en permettant Android de continuer à la boîte de dialogue « Force Close », puis regarder LogCat (dans votre perspective DDMS) pour la trace de la pile.

Je suppose que vous avez une préférence nommée intSetting mais ce n'est pas un entier, mais qui est juste une supposition. Off le brassard, je ne peux penser à aucune des classes intégrées Preference qui stockeront une préférence entier, comme ils stockent la plupart des chaînes.

Votre façon d'accéder est correcte et ne devrait pas être nécessaire de modifier le SharedPreferences par défaut (en utilisant this).

Voici un exemple de projet montrant l'utilisation de PreferenceActivity et obtenir le retour de SharedPreferences.

Autres conseils

Juste pour vous assurer:

  • vous AndroidManifest vous devriez avoir le Activity qui va PreferenceActivity avec quelque chose comme ceci:

  • Le Activity qui étend PreferenceActivity devrait avoir le code suivant:

    @Override     onCreate vide protégé (Bundle savedInstanceState) {         super.onCreate (savedInstanceState);         addPreferencesFromResource (R.layout.prefs);         }

R.layout.prefs est xml de vos préférences.

Si vous avez fait les deux choses, s'il vous plaît modifier votre question avec le xml que vous utilisez si ppl peut reproduire votre problème.

Il ne plantera pas, même si votre préférence n'a pas été enregistrée, je pense que vous avez manqué un peu de code et l'accident ne vient pas de ce point. Avez-vous des autres threads?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top