如何阻止我的arraylist被多次放入我的共享偏好文件中?

时间:2017-12-03 19:23:34

标签: java android gson android-sharedpreferences

arraylist的格式应为[{"12345"}, {"67890"}, etc...]

但是当我关闭我的应用程序时 - 我的意思是按下后退按钮返回Android主屏幕所需的时间 - 然后重新启动它,我看到MatchingContactsAsArrayList[{"12345"}, {"67890"}, etc...,{"12345"}, {"67890"}, etc...] < / p>

如果我关闭它两次,arraylist会出现3次,依此类推,它会持续变长。它应该只显示一次值。

我想editorMatchingContactsAsArrayList.remove(jsonMatchingContactsAsArrayList).commit(); 会解决这个问题。

这是我的代码:

        @Override
            public void onResponse(String response) {

                //convert the JSONArray, the response, to a string
                String MatchingContactsAsString = response.toString();

                //make an arraylist which will hold the phone_number part of the MatchingContacts string
                MatchingContactsAsArrayList = new ArrayList<String>();

                try {
                    JSONArray Object = new JSONArray(MatchingContactsAsString);
                    for (int x = 0; x < Object.length(); x++) {
                        final JSONObject obj = Object.getJSONObject(x);
                        MatchingContactsAsArrayList.add(obj.getString("phone_number"));

                    }

                    SharedPreferences sharedPreferencesMatchingContactsAsArrayList = PreferenceManager.getDefaultSharedPreferences(getApplication());
                    SharedPreferences.Editor editorMatchingContactsAsArrayList = sharedPreferencesMatchingContactsAsArrayList.edit();
                    Gson gsonMatchingContactsAsArrayList = new Gson();
                    String jsonMatchingContactsAsArrayList = gsonMatchingContactsAsArrayList.toJson(MatchingContactsAsArrayList);
                    editorMatchingContactsAsArrayList.putString("MatchingContactsAsArrayList", jsonMatchingContactsAsArrayList);
                    editorMatchingContactsAsArrayList.remove(jsonMatchingContactsAsArrayList).commit();
                    editorMatchingContactsAsArrayList.commit();

                } catch (Exception e) {
                    e.printStackTrace();
                }


            }

1 个答案:

答案 0 :(得分:1)

SharedPreferences.remove()方法接收您以前保存的key

在这种情况下是&#34; MatchingContactsAsArrayList&#34;。

实际上,您不需要使用remove(),因为现有putString()的{​​{1}}会覆盖该值。请确保响应中的数据正确无误。