应用程序打开时,SharedPreferences会自行清除

时间:2016-11-22 10:01:26

标签: java android sharedpreferences hashset setstring

我已将SharedPreferences添加到HomeActivity.java,以便为购物车保存ID。这是我在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。

这是我向SharedPreferences添加ID的方式:

HomeActivity.cart.add(productId);
HomeActivity.editor.putStringSet(HomeActivity.AddedItems, HomeActivity.cart);
HomeActivity.editor.apply();

如何解决此问题,以便每次应用打开时都不会重置cartItems.getStringSet("AddedItems")

2 个答案:

答案 0 :(得分:0)

试试这个:

SharedPreferences cartItems = getSharedPreferences(&#34; AddedItems&#34;,Context.MODE_PRIVATE);         SharedPreferences.Editor 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/

答案 1 :(得分:0)

 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,则无法保证他们会保留其值。