使用SharedPreferences保存和加载不起作用

时间:2019-04-19 10:59:10

标签: java android

我尝试使用sharedpreferences保存我的ToDoList,但是不幸的是,我很难使它正常工作。

这是我的代码:


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

              loadData();

              ...
    }

    private void loadData() {

        if (initialStart) {
            SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
            Gson gson = new Gson();
            String json = sharedPreferences.getString("task lisk", null);
            Type type = new TypeToken<ArrayList<Record>>() {
            }.getType();

            AddItemActivity.listItems = gson.fromJson(json, type);
            initialStart = false;
        }
        if (AddItemActivity.listItems == null) {
            AddItemActivity.listItems = new ArrayList<>();
        }

        if (adapter == null) {
            adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, AddItemActivity.listItems);
        }
        adapter.notifyDataSetChanged();
    }

    public void saveData() {
        SharedPreferences sharedPreferences = getSharedPreferences("todo list", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        Gson gson = new Gson();
        String json = gson.toJson(AddItemActivity.listItems);
        editor.putString("task list", json);
        editor.apply();
    }

 @Override
    protected void onPause() {
        super.onPause();
    }

我创建了一个单独的AddItem布局,并在其中创建了ArrayList,所以这就是我用AddItemActivity.listItems调用它的原因。

2 个答案:

答案 0 :(得分:1)

您的CommentForm名称必须与存储和检索数据的名称相同。

SharedPreference

您使用此名称进行存储,但是在检索时却有所不同。因此,更改

 SharedPreferences sharedPreferences = getSharedPreferences("todo list", MODE_PRIVATE);

 SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);

答案 1 :(得分:0)

您在KEY

中没有使用相同的 SharedPreferences

SharedPreferences保存和检索数据时,您需要使用相同的键

  

SharedPreferences获取数据时,您已使用 "task lisk" 键   并且在SharedPreferences中保存了数据后,就使用了 task list

喜欢这个

private void loadData() {

        if (initialStart) {
            SharedPreferences sharedPreferences = getSharedPreferences("todo list", MODE_PRIVATE);
            Gson gson = new Gson();
            String json = sharedPreferences.getString("task_list", null);
            Type type = new TypeToken<ArrayList<Record>>() {
            }.getType();

            AddItemActivity.listItems = gson.fromJson(json, type);
            initialStart = false;
        }
        if (AddItemActivity.listItems == null) {
            AddItemActivity.listItems = new ArrayList<>();
        }

        if (adapter == null) {
            adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, AddItemActivity.listItems);
        }
        adapter.notifyDataSetChanged();
    }

    public void saveData() {
        SharedPreferences sharedPreferences = getSharedPreferences("todo list", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        Gson gson = new Gson();
        String json = gson.toJson(AddItemActivity.listItems);
        editor.putString("task_list", json);
        editor.apply();
    }