簡體   English   中英

應用程序打開時,SharedPreferences會自行清除

[英]SharedPreferences clears itself when the app opens

我已將SharedPreferences添加到我的HomeActivity.java ,以便保存購物車的ID。 這是我在HomeActivity.javaHomeActivity.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM