SharedPreferences putStringSet doesn't work

android, sharedpreferences

Solution

use edit.clear() before putStringSet

SharedPreferences ss = getSharedPreferences("db", 0);
Set<String> hs = ss.getStringSet("set", new HashSet<String>());
hs.add(String.valueOf(hs.size()+1));
Editor edit = ss.edit();
edit.clear();
edit.putStringSet("set", hs);
edit.commit();

Problem

I need to put Set in SharedPreference, but I have a problem. when I click button, I will get Set from SharedPreference and add data to Set then put back SharedPreference, but when I destroy project and open it again, the sharedPreference only get one string in Set ``` SharedPreferences s = getSharedPreferences("db", 0); Log.i("chauster", "1.set = "+s.getStringSet("set", new HashSet<String>())); Button btn = (Button)findViewById(R.id.button1); btn.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { SharedPreferences ss = getSharedPreferences("db", 0); Set<String> hs = ss.getStringSet("set", new HashSet<String>()); hs.add(String.valueOf(hs.size()+1)); Editor edit = ss.edit(); edit.putStringSet("set", hs); edit.commit(); SharedPreferences sss = getSharedPreferences("db", 0); Log.i("chauster", "2.set = "+sss.getStringSet("set", new HashSet<String>())); } }); ``` when I install project first, and I click button 4 times, the logcat print it ``` 1.set = [] 2.set = [1] 2.set = [2, 1] 2.set = [3, 2, 1] 2.set = [3, 2, 1, 4] ``` it's look like success to put string in sharedPreference Set, but when I destroy app and open it again, the logcat print it ``` 1.set = [1] ``` it means only one string in Set from sharedPreference, I don't know what's happened? Please help me. thanks~

Original source

Related problems