SharedPreferences 在应用程序打开时自行清除
SharedPreferences clears itself when the app opens
我已将 SharedPreferences 添加到我的 HomeActivity.java
,以便保存购物车的 ID。这是我在 HomeActivity.java
中为它初始化的代码,它是启动器 activity:
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,然后覆盖了旧值。
因此,当您添加新的产品 ID 时,请执行以下操作:
cart = cartItems.getStringSet("AddedItems", new HashSet<String>());
cart.add(productId);
editor.putStringSet(HomeActivity.AddedItems, HomeActivity.cart);
editor.apply();
旁注:HomeActivity.cart
告诉我你可能在其他 类 中使用了静态变量。不要这样做。你不能保证 运行 如果它们没有被标记为 final
.
,它们将保持它们的值
我已将 SharedPreferences 添加到我的 HomeActivity.java
,以便保存购物车的 ID。这是我在 HomeActivity.java
中为它初始化的代码,它是启动器 activity:
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,然后覆盖了旧值。
因此,当您添加新的产品 ID 时,请执行以下操作:
cart = cartItems.getStringSet("AddedItems", new HashSet<String>());
cart.add(productId);
editor.putStringSet(HomeActivity.AddedItems, HomeActivity.cart);
editor.apply();
旁注:HomeActivity.cart
告诉我你可能在其他 类 中使用了静态变量。不要这样做。你不能保证 运行 如果它们没有被标记为 final
.