2013-07-27 23 views
5

Ich suche nach Stunden, um herauszufinden, warum das Speichern der booleschen Liste in gemeinsamen Voreinstellungen nicht funktioniert.ArrayList in freigegebenen Einstellungen speichern

Die Methoden speichern nicht oder laden etwas ... Die Methode load gibt immer die alternativen Werte zurück: so list_size als 0 und die booleschen Werte als false.

Zunächst einmal erstelle ich die Liste in meinem MainActivity und rufen Sie die Save-Methode:

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

Die Unterklasse SaveLoadTraining wie folgt aussieht:

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

Ich kann nicht herausfinden, was schief läuft ...

Vielleicht verfahre ich den Kontext auf einem falschen Weg? Ich nenne nur diese Methode den Kontext des MainActivity zu erhalten:

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

'Ich kann nicht herausfinden, was schief läuft ...' - weder wir können, weil Sie uns nicht erklärt haben;) – Simon

+0

ehm, hehe;) Die Methoden nicht sparen oder etwas Laden .. Die loadmethod gibt immer die alternativen Werte zurück: so list_size als 0 und die booleschen Werte als false – Bolic

+0

Ich habe gerade Ihren Code kopiert und er funktioniert für mich. Bitte zeigen Sie, wo Sie es laden und speichern oder wie Sie testen. –

Antwort

3

Sie die folgenden Änderungen in Ihrem Code machen, und es sollte funktionieren. Nehmen Sie SharedPrefrences mSharedPrefs als Ihre Klassenvariable.

Machen Sie zwei verschiedene Methoden zum Entfernen und Hinzufügen von Werten zu gemeinsamen Einstellungen und tun Sie es in zwei Commits statt 1 Commit.

1. Verfahren zum Entfernen der Liste

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

2. Verfahren zum Hinzufügen der Liste

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

Ich hoffe, dass dies funktionieren wird.

+0

Ich habe den Fehler herausgefunden. Es war irgendwo in meinem Code. Also funktioniert der Code genauso gut wie ich gepostet habe. Neverless ... danke ;-) – Bolic

+0

@Bolic Kein Problem Mate :) –

+0

@SalmanAyub Ich möchte speichern/speichern Liste in Gemeinsame Einstellungen wie kann ich das tun? Ich möchte Saiten der Liste nicht speichern Ich möchte komplette ArrayList in SharedPreferences speichern – 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 
    } 
} 
Verwandte Themen