2010-06-25 20 views
1

J'essaie de stocker la préférence de l'utilisateur si la case à cocher est cliqué ou non dans une activité, mais quand j'arrête et redémarre l'application, je n'obtiens pas le résultat souhaité. c'est-à-dire si l'utilisateur avait coché la case puis au redémarrage je ne l'obtiens pas comme vérifié.ne pas obtenir le résultat en utilisant SharedPreferences dans android

voici ce que j'ai essayé:

public void onCreate() 
{ 
    .... 
    checkbox=(CheckBox)findViewById(R.id.checkbox); 



// storing the user preference 
    SharedPreferences sharedpref = getSharedPreferences(MYPREF,Activity.MODE_PRIVATE); //here MYPREF is the name of the file storing the preference 
    SharedPreferences.Editor e = sharedpref.edit(); 
    e.putBoolean("checkboxvalue", checkbox.isChecked()); 
    e.commit(); 

    //retrieving the preference set 
    SharedPreferences mysharedpref = getSharedPreferences(TextSpeaker.MYPREF,Activity.MODE_PRIVATE); 
    checked=mysharedpref.getBoolean("checkboxvalue", false); 
    if(checked)checkbox.setChecked(true); 

Répondre

0

Vous travaillez avec deux fichiers de données de préférences distinctes, selon toute vraisemblance, car il semble que vous avez deux composants différents (par exemple, activités). Essayez de passer à getDefaultSharedPreferences() (disponible sur PreferenceManager) au lieu de getSharedPreferences(), et voyez si cela aide.

+0

J'utilise le même fichier de préférences je l'ai changé pour SharedPreferences s = getSharedPreferences (MyPref, Activity.MODE_WORLD_READABLE); // ici MYPREF est le nom du fichier stockant la préférence SharedPreferences.Editor e = sharedpref.edit(); e.putBoolean ("checkboxvalue", checkbox.isChecked()); e.commit(); // récupération du jeu de préférences \t \t SharedPreferences mysharedpref = getSharedPreferences (MYPREF, Activity.MODE_WORLD_READABLE); \t \t checked = mysharedpref.getBoolean ("checkboxvalue", false); \t \t si (cochée) checkbox.setChecked (true); toujours pas de succès. – pranay

+0

je mets ceci dans le meCthode sur mon activité, devrais-je le faire dans onStart()? – pranay

0

Salut Pranay si vous avez créé avant votre préférence avec le même nom dans une autre activité ou application, vous aurez des problèmes de lecture du même changement de préférence à MODE_WORLD_READABLE

getSharedPreferences(MYPREF,Activity.MODE_WORLD_READABLE); 

ou

getSharedPreferences(MYPREF,1); 
+0

j'ai essayé même ceci, ne recevant toujours pas les arrangements stockés :( – pranay

+0

j'ai réussi à l'obtenir finalement finalement, :) :). En fait, j'utilisais ces deux méthodes dans la méthode onCreate() de mon activité quand la partie de stockage aurait dû être faite dans la méthode onPause(). – pranay

4

De nombreuses applications peuvent fournir un moyen de capturer les préférences de l'utilisateur sur les paramètres d'une application spécifique ou d'une activité. Pour soutenir cela, Android fournit un ensemble simple d'API.

Les préférences sont généralement des paires de valeurs de nom. Ils peuvent être stockés en tant que «Préférences partagées» à travers différentes activités dans une application (notez qu'il ne peut pas être partagé actuellement entre les processus). Ou il peut s'agir de quelque chose qui doit être stocké spécifique à une activité.

  1. Préférences partagées: Les préférences partagées peuvent être utilisées par tous les composants (activités, services, etc.) des applications. Préférences gérées par l'activité: Ces préférences peuvent uniquement être utilisées dans l'activité et ne peuvent pas être utilisées par d'autres composants de l'application.

Préférences partagées:

Les préférences partagées sont gérées à l'aide de la méthode getSharedPreferences de la classe Context. Les préférences sont stockées dans un fichier par défaut (1) ou vous pouvez spécifier un nom de fichier (2) à utiliser pour faire référence aux préférences.

(1) Voici comment vous obtenez l'instance lorsque vous spécifiez le nom du fichier

public static final String PREF_FILE_NAME = "PrefFile"; 
    SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 

MODE_PRIVATE est le mode de fonctionnement pour les préférences. C'est le mode par défaut et signifie que le fichier créé sera accessible uniquement par l'application appelante. Les deux autres modes pris en charge sont MODE_WORLD_READABLE et MODE_WORLD_WRITEABLE. Dans MODE_WORLD_READABLE l'autre application peut lire le fichier créé mais ne peut pas le modifier. Dans le cas de MODE_WORLD_WRITEABLE d'autres applications ont également des autorisations d'écriture pour le fichier créé.

(2) La méthode recommandée est d'utiliser le mode par défaut, sans spécifier le nom du fichier

SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context); 

Enfin, une fois que vous avez l'instance de préférences, voici comment vous pouvez récupérer le stocké valeurs des préférences:

int storedPreference = preferences.getInt("storedInt", 0); 

Pour stocker des valeurs dans le fichier de préférencesL'objetdoit être utilisé. Editor est l'interface imbriquée de la classe SharedPreference.

SharedPreferences.Editor editor = preferences.edit(); 
editor.putInt("storedInt", storedPreference); // value to store 
editor.commit(); 

Editor soutiennent également des méthodes telles que remove() et clear() pour supprimer la valeur de préférence à partir du fichier.

Préférences d'activité:

Les préférences partagées peuvent être utilisées par d'autres composants de l'application. Mais si vous n'avez pas besoin de partager les préférences avec d'autres composants et que vous voulez avoir des préférences privées d'activités. Vous pouvez le faire avec l'aide de la méthode getPreferences() de l'activité. La méthode getPreference utilise la méthode getSharedPreferences() avec le nom de la classe d'activité pour le nom de fichier de préférence.

Voici le code pour obtenir les préférences

SharedPreferences preferences = getPreferences(MODE_PRIVATE); 
int storedPreference = preferences.getInt("storedInt", 0); 

Le code pour stocker des valeurs est aussi même que dans le cas des préférences partagées.

SharedPreferences preferences = getPreference(MODE_PRIVATE); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putInt("storedInt", storedPreference); // value to store 
editor.commit(); 

Vous pouvez également utiliser d'autres méthodes telles que le stockage de l'état d'activité dans la base de données. Remarque Android contient également un package appelé android.preference. Le package définit des classes pour implémenter l'interface utilisateur des préférences d'application.

Pour voir d'autres exemples, consultez l'article Data Storage d'Android sur le site des développeurs.

+0

Merci beaucoup pour l'explication détaillée – pranay