2013-07-27 15 views
5

Sto cercando ore per scoprire perché il salvataggio dell'elenco booleano nelle preferenze condivise non funziona.Salva lista array nelle preferenze condivise

I metodi non salvano o caricano qualcosa ... il metodo di carico restituisce sempre i valori alternativi: quindi list_size come 0 e booleane come false.

Prima di tutto creare l'elenco nel mio MainActivity e chiamare il metodo Save:

SaveLoadTraining sLoad = new SaveLoadTraining(); 
    ArrayList<Boolean> listBoolTrain = new ArrayList<Boolean>(); 
    listBoolTrain.add(true); 
    listBoolTrain.add(true); 
    sLoad.saveArray(listBoolTrain); 

La sottoclasse SaveLoadTraining assomiglia a questo:

package de.sebspr.app08.halle; 

import java.util.ArrayList; 

import android.content.Context; 
import android.content.SharedPreferences; 
import de.sebspr.app08.MainActivity; 

public class SaveLoadTraining { 

    private Context context; 
    public static final String PREFS_NAME = "ListFile"; 
    private ArrayList<Boolean> list; 

    public SaveLoadTraining(){ 
     this.context = MainActivity.getMContext(); 
    } 

    public void saveArray(ArrayList<Boolean> list){ 

     this.list = list; 

     SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 

     int size = list.size(); 
     editor.putInt("list_size", size); 

     for (int i = 0; i < size; i++) { 
      editor.remove("list_"+i); 
     } 
     for (int i = 0; i < size; i++) { 
      editor.putBoolean("list_"+i, list.get(i)); 
     }  
     editor.commit(); 
    } 

    public ArrayList<Boolean> loadArray(){ 

     SharedPreferences file = context.getSharedPreferences(PREFS_NAME, 0); 
     list = new ArrayList<Boolean>(); 
     int size = file.getInt("list_size", 0); 

     for(int i = 0; i<size;i++){ 
      boolean bool = file.getBoolean("list_"+i, false); 
      list.add(bool); 
     } 
     return list; 
    } 
} 

io non riesco a capire cosa non va ...

Forse gestisco il contesto in modo errato? mi basta chiamare questo metodo per ottenere il contesto del MainActivity:

... 
mContext = this; 
... 
    public static Context getMContext(){ 
     return mContext; 
    } 
+2

'Non riesco a capire che cosa sta andando male ...' - non possiamo perché non ci avete detto;) – Simon

+0

ehm, hehe;) I metodi non sono il risparmio o il caricamento di qualcosa .. . il metodo di carico restituisce sempre i valori alternativi: quindi list_size come 0 e booleane come false – Bolic

+0

Ho appena copiato il codice e funziona per me. Si prega di mostrare dove si sta caricando e salvandolo o come si sta testando. –

risposta

3

Basta apportare le seguenti modifiche nel codice, e dovrebbe funzionare. Prendere SharedPrefrences mSharedPrefs come variabile di classe.

public class SaveLoadTraining 
{ 
private Context context; 
public static final String PREFS_NAME = "ListFile"; 
private ArrayList<Boolean> list; 
private SharedPreferences mSharedPrefs; 

public SaveLoadTraining(){ 
    this.context = getApplicationContext(); 
    mSharedPrefs = context.getSharedPreferences(PREFS_NAME, 0); 
} 

fare 2 diversi metodi per la rimozione e l'aggiunta di valori a Preferenze condivisi e fanno in due commit invece di 1 Commit.

primo metodo per la rimozione della lista

public void removeArray(ArrayList<Boolean> list) 
{ 
SharedPreferences.Editor editor = mSharedPrefs.edit(); 

int size = list.size(); 

    for (int i = 0; i < size; i++) { 
     editor.remove("list_"+i); 
    } 
    editor.commit(); 
} 

secondo metodo per aggiungere la lista

public void addArray(ArrayList<Boolean> list) 
{ 
SharedPreferences.Editor editor = mSharedPrefs.edit(); 

    int size = list.size(); 
    editor.putInt("list_size", size); 

    for (int i = 0; i < size; i++) { 
     editor.putBoolean("list_"+i, list.get(i)); 
    }  
    editor.commit(); 
} 

spero che questo funzionerà.

+0

Ho capito l'errore. Era da qualche parte nel mio codice. Quindi il codice funziona perfettamente come ho postato. Neverless ... grazie ;-) – Bolic

+0

@Bolic No Problem mate :) –

+0

@SalmanAyub Voglio salvare/memorizzare Elenco in Preferenze condivise come posso farlo? non voglio salvare stringhe di lista voglio archiviare la lista completa di array in SharedPreferences – Erum

1
public static boolean saveArrayList() 
{ 

SharedPreferences sp = SharedPreferences.getDefaultSharedPreferences(this); 
SharedPreferences.Editor mEdit1 = sp.edit(); 
mEdit1.putInt("Status_size", sKey.size()); /* sKey is an array List*/ 

    for(int i=0;i<sKey.size();i++) 
    { 
    mEdit1.remove("Status_" + i); 
    mEdit1.putString("Status_" + i, sKey.get(i)); 
    } 

    return mEdit1.commit();  
} 

**Loading Array Data from Shared Preferences** 

public static void loadArrayList(Context mContext) 
{ 
    Shared Preferences mSharedPreference1 = PreferenceManager.getDefaultSharedPreferences(mContext); 
    sKey.clear(); //skey is arraylist 
    int size = mSharedPreference1.getInt("Status_size", 0); 

    for(int i=0;i<size;i++) 
    { 
     sKey.add(mSharedPreference1.getString("Status_" + i, null)); //skey is arraylist 
    } 
} 
Problemi correlati