0
在浏览关于此主题的其他问题后,我一直无法找到我的错误的来源。从共享首选项中书写和读取不能正常工作
我在SharedPreferences中存储名为Assignments的自定义对象的JSON字符串。
这里是我的Assignment.save()方法
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);
}
我也有一个需要阅读sharedPreferences所有的作业,然后将其反序列化到的分配对象名单,并返回它loadAllAssignments方法。
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;
}
该错误是在prefs.getAll发生()行,因为我没有得到任何来自SharedPreferences文件的密钥。有没有人有一些想法,为什么发生这种情况?
这里是我使用来测试它的代码
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);
}
预先感谢您
你需要调用'editor.commit()'你把数据放到sharedPreferences后... – Opiatefuchs
谢谢。我对Android非常陌生。 –
非常欢迎.. – Opiatefuchs