gpt4 book ai didi

java - 从共享首选项中写入和读取无法正常工作

转载 作者:行者123 更新时间:2023-12-02 12:48:17 25 4
gpt4 key购买 nike

在查看了有关此主题的其他几个问题后,我无法找到错误的根源。

我在 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 方法,需要读取 sharePreferences 中的所有分配,然后将它们反序列化为分配对象列表并返回它。

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);
}

提前谢谢

最佳答案

sharedPreferences 添加一些数据后,您需要调用 editor.commit()。所以你的方法必须是:

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);
edit.commit();
}

关于java - 从共享首选项中写入和读取无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44684034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com