将项添加到已保存在android中的共享首选项中的arralist中

时间:2016-03-30 11:57:04

标签: android arraylist sharedpreferences

我有一个已存储在共享偏好中的数组列表。我想在数组列表中添加另一个项目。 每当我尝试在数组列表中添加项目时,它都会删除存储在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();

4 个答案:

答案 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 cartArrayListIDcartArrayListName,.. etc,然后将新值放入其中,然后将其保存在SharedPreferences中反过来会用新的替换旧的保存,所以你必须:

  1. 首先从共享偏好设置中获取相应的ArrayList。(例如cartArrayListName
  2. 将其保存在名为cartArrayListID的新数组中。
  3. 将新值放入此新数组中。
  4. 将其保存在SharedPreferences中。

答案 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;
    }
}