我有一个已存储在共享偏好中的数组列表。我想在数组列表中添加另一个项目。 每当我尝试在数组列表中添加项目时,它都会删除存储在arraylist中的所有先前数据
如何在不删除共享偏好设置中的先前数据的情况下添加项目
ArrayList<String> cartArrayListID,cartArrayListName,cartArrayListPrice,cartArrayListImage;
String cartID,cartName,cartPrice,cartImage;
cartArrayListID=new ArrayList<>();
cartArrayListName=new ArrayList<>();
cartArrayListPrice=new ArrayList<>();
cartArrayListImage=new ArrayList<>();
cartArrayListID.add(cartID);
cartArrayListName.add(cartName);
cartArrayListPrice.add(cartPrice);
cartArrayListImage.add(cartImage);
SharedPreferences sprefCart=getSharedPreferences("CARTINFO", Context.MODE_PRIVATE);
SharedPreferences.Editor editorCart=sprefCart.edit();
Gson gson = new Gson();
String id_=gson.toJson(cartArrayListID);
String name_=gson.toJson(cartArrayListName);
String price_=gson.toJson(cartArrayListPrice);
String image_=gson.toJson(cartArrayListImage);
editorCart.putString("ID", id_);
editorCart.putString("NAME", name_);
editorCart.putString("PRICE", price_);
editorCart.putString("IMAGE", image_);
editorCart.apply();
Toast.makeText(ProductActivity.this, "Added to cart", Toast.LENGTH_SHORT).show();
答案 0 :(得分:1)
您无法从ArrayList
获得SharedPreferences
。
您可以使用getStringSet获得Set
。请注意,jdoc
表示
请注意,您不得修改此调用返回的set实例。
所以做的事情如下:
Set<String> mySet = new HashSet(yourPrefDataCollection);
mySet.add("some string");
sp.edit().putStringSet("your set key", mySet).commit();
答案 1 :(得分:1)
正如我在您的代码中看到的那样,您每次都会创建一个全新的ArrayLists cartArrayListID
,cartArrayListName
,.. etc,然后将新值放入其中,然后将其保存在SharedPreferences中反过来会用新的替换旧的保存,所以你必须:
cartArrayListName
)cartArrayListID
的新数组中。答案 2 :(得分:0)
使用GSON从字符串中获取ArrayList 添加一些项目 尝试使用this示例将ArrayList保存为String,以便存储到SharedPreferences。
如果您的ArrayList有一些特殊类型(不是String),请使用以下结构:
ArrayList<Foo> list = new Gson().fromJson(
gsonString, new TypeToken<List<Foo>>(){}.getType());
答案 3 :(得分:0)
实现此目的的最佳方法是将数组存储为JSON格式的String。您必须创建一个简单的POJO来存储您的数组,其余的很简单。见下面的例子;
public void saveArray(List<String> yourArray) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("YOUR_ARRAY_KEY", new Gson().toJson(new ArrayListHolder(yourArray)));
editor.apply();
}
public List<String> getArray() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
String arrayJson = sharedPreferences.getString("YOUR_ARRAY_KEY", null);
if (arrayJson != null) {
return new Gson().fromJson(arrayJson, ArrayListHolder.class).getYourArray();
}
return null;
}
private class ArrayListHolder {
private List<String> yourArray;
public ArrayListHolder(List<String> yourArray) {
this.yourArray = yourArray;
}
public List<String> getYourArray() {
return yourArray;
}
public void setYourArray(List<String> yourArray) {
this.yourArray = yourArray;
}
}