i am searching for hours to find out why saving boolean list in shared preferences is not working.
The methods are not saving or loading something... the loadmethod always returns the alternative values: so list_size as 0 and the booleans as false.
First of all i create the list in my MainActivity and call the save Method:
SaveLoadTraining sLoad = new SaveLoadTraining();
ArrayList<Boolean> listBoolTrain = new ArrayList<Boolean>();
listBoolTrain.add(true);
listBoolTrain.add(true);
sLoad.saveArray(listBoolTrain);
The subclass SaveLoadTraining looks like this:
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;
}
}
I can not figure out what is going wrong...
Perhaps i handle the context on a wrong way? I just call this method to get the context of the MainActivity:
...
mContext = this;
...
public static Context getMContext(){
return mContext;
}
Just make the following changes in your code, and it should work. Take
SharedPrefrences mSharedPrefs
as your class variable.Make 2 different Methods for removing and adding values to Shared Preferences and do it in two commits instead of 1 Commit.
1st Method for Removing the List
2nd Method for Adding the List
I hope this will work.