gpt4 book ai didi

java - 从共享首选项中存储的数组列表中删除项目

转载 作者:行者123 更新时间:2023-12-01 17:21:01 25 4
gpt4 key购买 nike

我有一个购物车,我想删除其中的产品,但遇到了问题。我可以添加产品并将其存储在共享首选项中,但是当涉及到删除时,什么也没有发生。这是我在适配器中的代码:

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();
}
});

我使用 arraylist.add() 添加产品的相同代码。我在这里做错了什么,有人可以帮忙吗?

编辑:

holder.addItems.setOnClickListener(v -> {
//listener.setCounter(0);
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.add(mArtikull);
String jsonString = gson.toJson(artikullObject);
mEditor.putString("artikujtShporta", jsonString);
mEditor.apply();
} else {
ArrayList<Artikujt> arrayArtikuj = new ArrayList<>();
arrayArtikuj.add(mArtikull);
Type listOfTestObject = new TypeToken<ArrayList<Artikujt>>(){}.getType();
String s = gson.toJson(arrayArtikuj, listOfTestObject);
mEditor.putString("artikujtShporta", s);
mEditor.apply();
}

});

最佳答案

您使用了错误的方法来删除对象

 artikullObject.remove(artikulli);

上面的方法将从列表中删除相同的对象,但是当您从 Gson 解析列表时,将准备一个新的列表,并且所有对象将具有不同的对象。

如何删除该对象?

如果该对象有任何唯一的 id,请通过迭代循环获取其索引,然后从列表中删除具有该索引的对象。

例如,您的 Artikujt 类是这样的

class Artikujt{
String uId;
// other data members..
}

//循环列表,检查要删除的项目的索引

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) {
int indexToRemove = -1
for(int i=0 ; i<artikullObject.size(); i++){
if(artikullObject.get(i).uid.equals(artikulli.uid)){
indexToRemove = i;
break;
}
}
if(i!=-1){
artikullObject.remove(indexToRemove);
}

String jsonString = gson.toJson(artikullObject);
mEditor.putString("artikujtShporta", jsonString);
mEditor.apply();
}
});

关于java - 从共享首选项中存储的数组列表中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61289362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com