Après avoir parcouru plusieurs autres questions sur ce sujet, je n'ai pas réussi à trouver la source de mon bogue.L'écriture et la lecture à partir de préférences partagées ne fonctionnent pas correctement
Je stocke une chaîne JSON d'un objet personnalisé appelé Affectations dans SharedPreferences.
Voici ma méthode
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);
}
J'ai aussi méthode loadAllAssignments Assignment.save() qui a besoin de lire toutes les affectations dans sharedPreferences puis les désérialiser dans une liste des affectations d'objets et de le retourner.
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;
}
Le bug se produit à la ligne prefs.getAll() parce que je ne reçois pas des clés du fichier SharedPreferences. Quelqu'un a-t-il des idées sur les raisons de cette situation?
Voici le code que je utilise pour tester
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);
}
Nous vous remercions à l'avance
vous devez appeler 'editor.commit()' après avoir mis les données en sharedPreferences ... – Opiatefuchs
Merci. Je suis assez nouveau sur Android. –
vous êtes les bienvenus .. – Opiatefuchs