SharedPreferencesはAPI11からSetを保存できるようになりましたが、こういうことをすると、一見上手くいっているようで上手く保存できなくなります。
/** * @return 保存したコレクション */ public SetgetStringSet(){ return sp.getStringSet(KEY, new HashSet ()); } /** * @param str 追加または削除する文字列 * @return 保存に成功すればtrueを返す */ public boolean updateStringSet(String str){ Set set = getStringSet(); if(set.contains(str)){ set.remove(str); } else { set.add(str); } return sp.edit().putStringSet(KEY, set).commit(); }
一見うまく動くんですが、プロセスが殺された後再度起動すると、前の値が保存されていません。しょぼーん。
色々試してみましたが、getStringSetのところでディープコピーすると正常に動作しました。
/** * @return 保存したコレクション */ public SetgetStringSet(){ Set saved = sp.getStringSet(KEY, new HashSet ()); HashSet returnSet = new HashSet (saved.size()); for (String str : saved) { returnSet.add(str); } return returnSet; }
あんまりスマートではないけど、まあ解決したのでおっけー。
0 件のコメント:
コメントを投稿