web-dev-qa-db-fra.com

Android - Stockage/récupération de chaînes avec des préférences partagées

Comme le titre le dit, je veux sauvegarder et récupérer certaines chaînes. Mais mon code ne passera pas par la première ligne ni récupéré ni stocké. J'ai essayé de suivre ce lien: http://developer.Android.com/guide/topics/data/data-storage.html

private void savepath(String pathtilsave, int i) {
    String tal = null;
    // doesn't go past the line below
    SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
    tal = String.valueOf(i);
    editor.putString(tal, pathtilsave);
    editor.commit();
}

et ma méthode de récupération:

public void getpaths() {
    String tal = null;
    // doesn't go past the line below
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    for (int i = 1; i <= lydliste.length - 1; i++) {
        tal = String.valueOf(i);
        String restoredText = settings.getString(tal, null);
        if (restoredText != null) {
            lydliste[i] = restoredText;
        }
    }
}

lydliste est un tableau de chaînes statique. PREFS_NAME est 

public static final String PREFS_NAME = "MyPrefsFile";
37
Rad

Je l'ai résolu! Cela n'a pas fonctionné lorsque j'ai appelé les méthodes depuis la classe! Je devais l'appeler d'une autre classe pour une raison quelconque, et écrire "classname.this" comme paramètre de contexte. Voici le travail final: 

SharedPreferences settings = ctx.getSharedPreferences(PREFS_NAME, 0);
    settings = ctx.getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putString(tal, pathtilsave);
     editor.commit(); 
4
Rad

Pour enregistrer dans les préférences:

PreferenceManager.getDefaultSharedPreferences(context).edit().putString("MYLABEL", "myStringToSave").apply();  

Pour obtenir une préférence enregistrée:

PreferenceManager.getDefaultSharedPreferences(context).getString("MYLABEL", "defaultStringIfNothingFound"); 

context est votre contexte.


Si vous obtenez plusieurs valeurs, il peut être plus efficace de réutiliser la même instance.

 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
 String myStrValue = prefs.getString("MYSTRLABEL", "defaultStringIfNothingFound");
 Boolean myBoolValue = prefs.getBoolean("MYBOOLLABEL", false);
 int myIntValue = prefs.getInt("MYINTLABEL", 1);

Et si vous enregistrez plusieurs valeurs:

Editor prefEditor = PreferenceManager.getDefaultSharedPreferences(context).edit();
prefEditor.putString("MYSTRLABEL", "myStringToSave");
prefEditor.putBoolean("MYBOOLLABEL", true);
prefEditor.putInt("MYINTLABEL", 99);
prefEditor.apply();  

Remarque: Enregistrer avec apply() est préférable à l’utilisation de commit(). La seule fois où vous avez besoin de commit() est si vous avez besoin de la valeur de retour, qui est très rare.

79
Doomsknight
private static final String PREFS_NAME = "preferenceName";

public static boolean setPreference(Context context, String key, String value) {
    SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = settings.edit();
    editor.putString(key, value);
    return editor.commit();
}

public static String getPreference(Context context, String key) {
    SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
    return settings.getString(key, "defaultValue");
}
7
Benito Bertoli

Si vous ne vous souciez pas de la valeur de retour de commit () better use apply (), étant donné qu’elle est asynchrone, elle est plus rapide que commit ().

final SharedPreferences prefs =  context.getSharedPreferences("PREFERENCE_NAME",
                Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("key", "value");
editor.apply();

Selon docs

À la différence de commit (), qui écrit ses préférences sur le stockage persistant de manière synchrone, apply () valide immédiatement les modifications apportées aux SharedPreferences en mémoire, mais lance une validation asynchrone sur le disque et vous ne serez pas averti des échecs. Si un autre éditeur sur cette SharedPreferences effectue une commit () régulière alors qu'une apply () est encore en attente, commit () bloquera jusqu'à ce que toutes les validations asynchrones soient terminées, ainsi que la validation elle-même. 

3
Aniket Thakur

essayez-le avec le contexte:

final SharedPreferences settings = context.getSharedPreferences(
            PREFS_NAME, 0);

return settings.getString(key, null);
2
Stefan Beike

Quelques étapes simples pour enregistrer une chaîne avec SharedPreferences:

classe publique MainActivity étend AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SharedPreferences prefs = this.getSharedPreferences("com.example.nec.myapplication", Context.MODE_PRIVATE);

    prefs.edit().putString("userName", "NEC").apply();

    String name = prefs.getString("userName", "");

    Log.i("saved string", name);
}
1
NEC

La classe SharedPreferences vous permet d'enregistrer des préférences spécifiques à une application Android.

L'API version 11 a introduit les méthodes putStringSet et getStringSet qui permettent au développeur de stocker une liste de valeurs de chaîne et d'extraire une liste de valeurs de chaîne, respectivement.

Un exemple de stockage d'un tableau de chaînes en utilisant SharedPreferences peut être fait comme suit:

// Get the current list.

SharedPreferences settings = this.getSharedPreferences("YourActivityPreferences", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
Set<String> myStrings = settings.getStringSet("myStrings", new HashSet<String>());

// Add the new value.

myStrings.add("Another string");


// Save the list.
 editor.putStringSet("myStrings", myStrings); editor.commit();
0
Jabbir Basha