0

我已将 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>并将其添加到cartItemsSharedPreferences。

出于某种原因,它可能认为cartItems.getStringSet("AddedItems")它等于 null,因此每次打开应用程序并且未保存购物车中的 ID 时它都会重置它。

这就是我将 ID 添加到 SharedPreferences 的方式:

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

我该如何解决这个问题,所以cartItems.getStringSet("AddedItems")每次打开应用程序时它都不会重置?

4

2 回答 2

0

尝试这个 :

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/

于 2016-11-22T10:34:44.580 回答
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

于 2016-11-22T12:00:42.720 回答