Autore Topic: Shared preferences memorizzare Array di String  (Letto 596 volte)

Offline Mikykly91

  • Utente junior
  • **
  • Post: 91
  • Respect: 0
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Htc one, Nexus 7 2013
  • Play Store ID:
    Michele Marconi
  • Sistema operativo:
    Surface 2 pro win 8.1
Shared preferences memorizzare Array di String
« il: 20 Agosto 2013, 17:41:22 CEST »
0
Salve, ho implementato nella mia applicazione questo pezzo di codice che non fa nient'altro che memorizzarmi dei nomi in un Array list che mi serviranno poi da assegnare ad uno spinner.

Il mio problema consiste nel fatto che, se eseguo la mia applicazione con questo codice

Codice: [Seleziona]
public static Set<String> camerieri;

        Context context = this;
       
       

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.camerieri);
               
                SharedPreferences settings = this.getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = settings.edit();
                Set<String> myStrings = settings.getStringSet("camerieri", new HashSet<String>());
                myStrings.add("bau");
                editor.putStringSet("camerieri", myStrings);
                editor.commit();
               
                Spinner spinner = (Spinner)findViewById(R.id.spinner1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                        this,
                        R.layout.spinnerlayout,
                        myStrings.toArray(new String[myStrings.size()])
                        );
        spinner.setAdapter(adapter);

ovvero inserendo una stringa "bau" ottengo nel mio spinner: bau e miao(che non si sa come è stato memorizzato da me in passato).
A questo punto con editor.commit il valore bau è salavato(in teoria).

Se poi eseguo questo codice:

Codice: [Seleziona]
public static Set<String> camerieri;

        Context context = this;
       
       

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.camerieri);
               
                SharedPreferences settings = this.getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = settings.edit();
                Set<String> myStrings = settings.getStringSet("camerieri", new HashSet<String>());
               
                Spinner spinner = (Spinner)findViewById(R.id.spinner1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                        this,
                        R.layout.spinnerlayout,
                        myStrings.toArray(new String[myStrings.size()])
                        );
        spinner.setAdapter(adapter);

identico a l'altro se non per il codice:

Codice: [Seleziona]
                myStrings.add("bau");
                editor.putStringSet("camerieri", myStrings);
                editor.commit();

che ho tolto.

A questo punto non dovrei visualizzare le mie 2 stringhe memorizzate in precedenza? miao e bau?

Perchè se eseguo questo codice ottengo solo "miao", che non si sa come è rimasto salvato permanentemente.

grazie, aiutatemi non capisco dov'è l'errore.

Post unito: 20 Agosto 2013, 17:51:25 CEST
Ho fatto altre prove, in pratica la prima stringa che salvo rimane memorizzata permanentemente, quelle successive solo momentaneamente, cioè ad applicazione aperta clicco sullo spinner visualizzo la lista aggiornata, come chiudo l'app lo spinner mi restituisce solo il primo valore che ho salvato all'inizio, sembra che dal 2no in poi non memorizzi nulla...
« Ultima modifica: 20 Agosto 2013, 17:51:25 CEST da Mikykly91, Reason: Merged DoublePost »

Offline matttt

Re:Shared preferences memorizzare Array di String
« Risposta #1 il: 20 Agosto 2013, 20:10:52 CEST »
0
Non ho controllato tutto il codice che hai inserito ma secondo la documentazione di getStringSet non si deve modificare il Set ritornato da quella funzione altrimenti possono crearsi problemi di consistenza.

Citazione
Note that you must not modify the set instance returned by this call. The consistency of the stored data is not guaranteed if you do, nor is your ability to modify the instance at all

Pagina di riferimento:
http://developer.android.com/reference/android/content/SharedPreferences.html#getStringSet(java.lang.String, java.util.Set<java.lang.String>)
Le mie apps su Google Play Store: