2016-02-02 13 views
5

Im sử dụng SharedPreference trên android để lưu trữ Tập hợp các chuỗi. Nó được lưu trữ và phát triển tốt cho kiến ​​thức của tôi nhưng khi ứng dụng được khởi động lại một số dữ liệu bị mất. Các chuỗi được thêm từng cái một và trước khi thêm chúng, tôi lấy tập hợp, thêm một String và sau đó lưu nó lại.Đặt <String> mất dữ liệu khi được khôi phục từ SharedPreferences sau khi ứng dụng được khởi động lại

Đây là cách tôi lưu trữ nó:

Set<String> emptySet = null; 
      SharedPreferences prefs = getContext().getSharedPreferences(getContext().getString(R.string.pref_disagree_key), Activity.MODE_PRIVATE); 

      String newIdAgreed = getItem(position).getId(); 

      if (prefs.contains(getContext().getString(R.string.pref_disagree_key))) { 

       Set<String> updateSet = prefs.getStringSet(getContext().getString(R.string.pref_disagree_key), emptySet); 
       updateSet.add(newIdAgreed); 
       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putStringSet(getContext().getString(R.string.pref_disagree_key), updateSet); 
       editor.commit(); 

      } else { 
       Set<String> newSet = new HashSet<String>(); 
       newSet.add(newIdAgreed); 
       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putStringSet(getContext().getString(R.string.pref_disagree_key), newSet); 
       editor.commit(); 
      } 

Và đây là cách tôi làm cho nó trở lại:

if (prefsDisagree.contains(getContext().getString(R.string.pref_disagree_key))){ 
     disagree_set = new HashSet<String>(prefsDisagree.getStringSet(getContext().getString(R.string.pref_disagree_key), emptySet)); 
     for (String item: disagree_set){ 
      //stuff done here 


     } 
} 

tôi thấy một số câu hỏi tương tự về chủ đề này nhưng không ai trong số các câu trả lời giải quyết vấn đề của tôi . Bất kỳ ý tưởng?

Trả lời

4

StringSet không liên tục khi bạn cố gắng chỉnh sửa lại sau khi được lưu và do đó dữ liệu mới được thêm vào sẽ không được lưu khi bạn thoát ứng dụng và mở lại.

Nó thực sự là tài liệu: getStringSet

Bạn cần phải sao chép đầu tiên StringSet và sau đó chèn/thêm dữ liệu vào sao chép StringSet:

Set<String> s = new HashSet<String(prefs.getStringSet(
       getContext().getString(R.string.pref_disagree_key), 
       emptySet)); 
Các vấn đề liên quan