[英]SharedPreferences clears itself when the app opens
我已將SharedPreferences添加到我的HomeActivity.java
,以便保存購物車的ID。 這是我在HomeActivity.java
中HomeActivity.java
初始化的代碼,它是啟動器活動:
SharedPreferences cartItems = getSharedPreferences("AddedItems", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = cartItems.edit();
if (cartItems.getStringSet("AddedItems", null) == null){
Set<String> cart = new HashSet<String>();
editor.putStringSet("AddedItems", cart);
editor.apply();
} else {
Set<String> cart = cartItems.getStringSet("AddedItems", null);
}
如您所見,該代碼應檢查cartItems.getStringSet("AddedItems", null)
是否存在。 如果確實存在,則將cart
設置為cartItems.getStringSet("AddedItems", null)
,但如果不存在,則將cart
定義為新的HashSet<String>
並將其添加到cartItems
SharedPreferences中。
由於某些原因,可能認為cartItems.getStringSet("AddedItems")
等於null,因此每次打開應用程序且未保存購物車中的ID時,都會將其重置。
這是我將ID添加到SharedPreferences的方法:
HomeActivity.cart.add(productId);
HomeActivity.editor.putStringSet(HomeActivity.AddedItems, HomeActivity.cart);
HomeActivity.editor.apply();
我該如何解決,以免每次打開應用程序時都不會重置cartItems.getStringSet("AddedItems")
?
嘗試這個 :
SharedPreferences cartItems = getSharedPreferences(“ AddedItems”,Context.MODE_PRIVATE); SharedPreferences.Editor編輯器= cartItems.edit();
if (Storedata != null){
editor.putStringSet("AddedItems", Storedata);
editor.commit();
} else {
Set<String> cart = cartItems.getStringSet("AddedItems", null);
}
Storedata是您要保存的購物車的ID。
將此內容作為參考: http : //androidopentutorials.com/android-sharedpreferences-tutorial-and-example/
public class MainActivity extends AppCompatActivity {
private final String ADDED_ITEMS = "AddedItems1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Set<String> cart = new HashSet<>();
SharedPreferences cartItems = getSharedPreferences(ADDED_ITEMS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = cartItems.edit();
if (cartItems.getStringSet(ADDED_ITEMS, null) == null) {
cart.add("hello");
editor.putStringSet(ADDED_ITEMS, cart);
editor.apply();
} else {
cart = cartItems.getStringSet(ADDED_ITEMS, null);
}
Log.d("test", cart.toString()); //put a breakpoint here and look what cart contains
}
}
我只運行了幾次,效果很好。 您不得編輯getStringSet返回的內容。 從sharedpreferences中獲取集合,將其分配給新變量,然后添加新產品ID,然后覆蓋。
如果重新啟動應用程序時HomeActivity.cart為空,則僅添加一個產品ID,然后覆蓋舊值。
因此,當您添加新的productID時,請執行以下操作:
cart = cartItems.getStringSet("AddedItems", new HashSet<String>());
cart.add(productId);
editor.putStringSet(HomeActivity.AddedItems, HomeActivity.cart);
editor.apply();
旁注: HomeActivity.cart
對我說,您可能在其他類中使用了靜態變量。 不要這樣 如果未將它們標記為final
,則不能保證它們將保留其值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.