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