共享首选项中的写入和阅读无法正常工作

时间:2017-06-21 18:51:33

标签: java android sharedpreferences

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

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

提前谢谢

1 个答案:

答案 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
相关问题