After looking through several other questions on this topic I haven't been able to find the source of my bug.
I am storing a JSON string of custom object called Assignments in SharedPreferences.
Here is my Assignment.save() method
public void save(Context context) {
String assignment = _gson.toJson(this);
SharedPreferences prefs = context.getSharedPreferences(prefs_file, Context.MODE_PRIVATE);
SharedPreferences.Editor edit = prefs.edit();
edit.clear();
edit.putString(this._assignmentName, assignment);
}
I also have loadAllAssignments method that needs to read all assignments in sharedPreferences and then deserialize them into a list of Assignments Objects and return it.
public static List<Assignment> loadAllAssignments(Context context) {
List<Assignment> assignments = new ArrayList<>();
Assignment assignment;
Gson gson = new Gson();
Log.d("loadAllAssignments()", "Create SharedPrefs");
SharedPreferences prefs = context.getSharedPreferences(prefs_file, Context.MODE_PRIVATE);
Log.d("loadAllAssignments()", "Get all keys");
Map<String, ?> keys = prefs.getAll();
Log.d("loadAllAssignments()", "keys " + keys.toString());
for(Map.Entry<String, ?> entry : keys.entrySet()) {
Log.d("loadAllAssignments()",entry.getKey() + ": " + entry.getValue().toString());
String temp = entry.getValue().toString();
assignment = gson.fromJson(temp, Assignment.class);
assignments.add(assignment);
Log.d("loadAllAssignments()", "Loaded: " + assignment.toString());
}
return assignments;
}
The bug is happening at the prefs.getAll() line because I am not getting any of the keys from the SharedPreferences file. Does anyone have some ideas as to why this is happening?
Here is the code I am using to test it
public void SaveLoadAssignments() throws Exception {
Context appContext = InstrumentationRegistry.getTargetContext();
Assignment assignment1 = new Assignment("Midterm", new Rubric());
for (Integer i = 0; i < 10; i++) {
assignment1.addStudent("John", i.toString());
}
assignment1.save(appContext);
Assignment assignment2 = new Assignment("Final", new Rubric());
for (Integer i = 0; i < 5; i++) {
assignment2.addStudent("John", i.toString());
}
assignment2.save(appContext);
List<Assignment> assignments = Assignment.loadAllAssignments(appContext);
}
Thank you in advance