在查看了有关此主题的其他几个问题之后,我无法找到我的错误来源。
我在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);
}
我还有loadAllAssignments方法,需要读取sharedPreferences中的所有赋值,然后将它们反序列化为Assignments对象列表并返回它。
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);
}
提前谢谢
答案 0 :(得分:1)
在向char mac[] = "00d5ff4l";
for (int i = 0; i < sizeof(mac); i++) {
if (mac[i] != other_array[i]) {
return 0;
}
else
return 1;
}
添加一些数据后,您需要致电editor.commit()
。所以你的方法必须是:
sharedPreferences