24 votes

SharedPreferences de différentes activités

Je charge depuis l'activité A les SharedPreferences de la manière suivante :

private void SavePreferences(String key, String value){
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
}

Dans l'activité B, je veux charger les SharedPreferences. Voici ce qui a provoqué une NullPointerException :

private void LoadPreferences(){   
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    data = sharedPreferences.getString("name", "08:00") ;
}

Si j'essaie la méthode suivante, j'obtiens cette erreur de compilation : "Aucune instance englobante du type A n'est accessible dans la portée"

private void LoadPreferences(){   
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(A.this);
    data = sharedPreferences.getString("name", "08:00") ;
}

Comment puis-je accéder aux données ?

48voto

ρяσѕρєя K Points 51253

Utiliser getApplicationContext() au lieu de this dans les deux activités comme suit :

Dans l'activité A, les SharedPreferences de la manière suivante :

 private void SavePreferences(String key, String value){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
        Intent sd=new Intent(this,Secongtess.class);
        startActivity(sd);
       }

et dans l'activité B, obtenir la valeur comme suit :

 private void LoadPreferences(){   
       SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
     String  data = sharedPreferences.getString("name", "08:00") ;
     Toast.makeText(this,data, Toast.LENGTH_LONG).show();
   }

car comme le dit la documentation :

getDefaultSharedPreferences(Context context) :

Obtient une instance de SharedPreferences qui pointe vers le fichier par défaut utilisé par le framework de préférences dans le contexte donné.

3voto

Goofy Points 1739

Pour stocker des valeurs dans les préférences partagées :

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
  SharedPreferences.Editor editor = preferences.edit();
  editor.putString("Name", "Harneet");
  editor.commit();

Pour récupérer des valeurs à partir des préférences partagées :

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
  String name = preferences.getString("Name", "");
  if(!name.equalsIgnoreCase(""))
  {
    name = name + "  Sethi";  /* Modifier la valeur ici */
  }

Pour éditer les données depuis les préférences partagées

SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
 editor.putString("text", mSaved.getText().toString());
 editor.putInt("selection-start", mSaved.getSelectionStart());
 editor.putInt("selection-end", mSaved.getSelectionEnd());
 editor.commit();

Pour récupérer des données depuis les préférences partagées

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
String restoredText = prefs.getString("text", null);
if (restoredText != null) 
{
  //mSaved.setText(restoredText, TextView.BufferType.EDITABLE);
  int selectionStart = prefs.getInt("selection-start", -1);
  int selectionEnd = prefs.getInt("selection-end", -1);
  /*if (selectionStart != -1 && selectionEnd != -1)
  {
     mSaved.setSelection(selectionStart, selectionEnd);
  }*/
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X