Salva ArrayList nelle preferenze condivise

sto cercando ore per scoprire perché salvare l'elenco boolean nelle preferenze condivise non funziona.

I methods non stanno salvando o caricando qualcosa … il metodo di carico restituisce sempre i valori alternativi: così list_size come 0 ei booleani come falsi.

  • Android: utilizzando SimpleCursorAdapter per get i dati dal database in ListView
  • Bitcoinj non verrà compilato su Nexus 5 con Android Studio
  • chiaro il contenuto WebView
  • Come distriggersre / hide l'indicatore a tre punti (indicatore del menu Opzione) sui telefoni ICS
  • Macchina fotografica: la function setDisplayOrientation non funziona per Samsung Galaxy ACE con Android 2.3.6
  • Android: Textview con text di scorrimento verticale
  • Prima di tutto creo l'elenco nella mia attività principale e chiami il metodo di salvataggio:

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

    La sottoclass SaveLoadTraining ha questo aspetto:

      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; } } 

    Non riesco a capire cosa sta andando male …

    Forse gestisco il context in modo sbagliato? Ho appena chiamato questo metodo per get il context della MainActivity:

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

  • La libreria ActionBarSherlock è piena di errori dopo l'importzione
  • Imansible risolvere l'importzione di android.os.ServiceManager
  • Definizione dynamic e utilizzo di selettori
  • Cambiare il colore di background del button di azione quando viene premuto
  • Metodo cross-platform per la rimozione della barra degli indirizzi in un'applicazione web mobile
  • ImageView con angoli arrotondati e ombra interiore
  • 2 Solutions collect form web for “Salva ArrayList nelle preferenze condivise”

    Basta fare le seguenti modifiche nel tuo codice e dovrebbe funzionare. Prendi SharedPrefrences mSharedPrefs come variabile di class.

     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); } 

    Esegui 2 diversi methods per la rimozione e l'aggiunta di valori alle Preferenze condivise e fai in due commit anziché 1 Commit.

    Primo metodo per rimuovere l'elenco

     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 l'aggiunta dell'elenco

     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 functionrà.

     public static boolean saveArrayList() { SharedPreferences sp = SharedPreferences.getDefaultSharedPreferences(this); SharedPreferences.Editor mEdit1 = sp.edit(); mEdit1.putInt("Status_size", sKey.size()); /* sKey is an arrays 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 arrayslist int size = mSharedPreference1.getInt("Status_size", 0); for(int i=0;i<size;i++) { sKey.add(mSharedPreference1.getString("Status_" + i, null)); //skey is arrayslist } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.