【问题标题】:Cannot remove an object from ArrayList<Object> saved in json无法从保存在 json 中的 ArrayList<Object> 中删除对象
【发布时间】:2020-04-17 20:52:42
【问题描述】:

我有一个购物车,我想从中删除产品,但我遇到了问题。我可以将产品添加到购物车并保存到共享首选项,但是当我想删除它但不起作用时。这是我所做的:

holder.removeProduct.setOnClickListener(v -> {
            SharedPreferences preferences = mContext.getSharedPreferences(ITEMS_PREF, Context.MODE_PRIVATE);
            SharedPreferences.Editor mEditor = preferences.edit();
            Gson gson = new Gson();
            String json = preferences.getString("artikujtShporta", "");
            ArrayList<Artikujt> artikullObject = gson
                    .fromJson(json, new TypeToken<ArrayList<Artikujt>>(){}.getType());

            if (artikullObject != null) {
                artikullObject.remove(artikulli);
                String jsonString = gson.toJson(artikullObject);
                mEditor.putString("artikujtShporta", jsonString);
                mEditor.apply();
            } else {
                ArrayList<Artikujt> arrayArtikuj = new ArrayList<>();
                arrayArtikuj.remove(artikulli);
                Type listOfTestObject = new TypeToken<ArrayList<Artikujt>>(){}.getType();
                String s = gson.toJson(arrayArtikuj, listOfTestObject);
                mEditor.putString("artikujtShporta", s);
                mEditor.apply();
            }
        });

我添加产品时所做的相同,不同之处在于我在这里调用

artikullObject.remove(artikulli);

我错过了什么?

【问题讨论】:

    标签: android arraylist gson


    【解决方案1】:

    有什么问题?

    这里的问题是您要从数组中删除的类Artikujt 的实例与您从首选项中读取的不同。

    一旦你使用Gson 将你的字符串变成一个新的数组,它就会生成你的类的全新实例,显然这些实例与你以前的不同。也许它们是平等的,但它们不是相同的实例。

    你能做些什么来解决这个问题?

    我假设您只想拥有每个Artikujt 一次。这意味着您还可以使用HashSet。这样做的好处是它将使用hashCode() 函数来确定要删除集合中的哪个实例。所以你只需要在你的模型类中重写这个hashCode() 函数并使用它的所有属性来计算哈希码。你可以在这里找到一个例子:https://www.sitepoint.com/how-to-implement-javas-hashcode-correctly/

    旁注

    你的 else 块是不必要的。这没有多大意义。您正在创建一个空的 ArrayList,然后从该空列表中删除某物,然后将此空列表保存到共享首选项中。如果你只是删除这个 else 块,你的代码逻辑不会改变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-22
      • 2013-03-17
      • 1970-01-01
      • 2016-07-01
      • 2021-03-11
      • 2015-08-02
      相关资源
      最近更新 更多