Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Arraylist中删除一个对象<;对象>;保存在SharedReferences中_Java_Android_Arraylist_Sharedpreferences - Fatal编程技术网

Java 从Arraylist中删除一个对象<;对象>;保存在SharedReferences中

Java 从Arraylist中删除一个对象<;对象>;保存在SharedReferences中,java,android,arraylist,sharedpreferences,Java,Android,Arraylist,Sharedpreferences,您好,一直以来,我都在寻找一种方法,将带有自定义对象的Arraylist保存并检索到android SharedReferences中。幸运的是,我有办法用这个 public void存储阵列(ArrayList sKey) { SharedReferences sp=首选项管理器 .GetDefaultSharedReferences(此.getApplicationContext()); SharedReferences.Editor mEdit1=sp.edit(); Gson Gson=

您好,一直以来,我都在寻找一种方法,将带有自定义对象的Arraylist保存并检索到android SharedReferences中。幸运的是,我有办法用这个

public void存储阵列(ArrayList sKey)
{
SharedReferences sp=首选项管理器
.GetDefaultSharedReferences(此.getApplicationContext());
SharedReferences.Editor mEdit1=sp.edit();
Gson Gson=新的Gson();
字符串json=gson.toJson(sKey);
mEdit1.putString(“itemx”,json);
mEdit1.commit();
}
公共ArrayList readArray(){
SharedReferences AppSharedRefers=首选项管理器
.GetDefaultSharedReferences(此.getApplicationContext());
String json=appSharedPrefs.getString(“itemx”,即“”);
Gson Gson=新的Gson();
Type Type=new-TypeToken(){}.getType();
ArrayList=gson.fromJson(json,类型);
退货清单;
}

现在有一部分我只想删除arraylist中的一个对象,怎么做?

您可以读取数组,删除元素并将其保存回:

public void removeElement(CartItem item) {
    ArrayList<CartItem> items = readArray();
    items.remove(item);
    saveArray(items);
}
public void removeElement(CartItem){
ArrayList items=readArray();
项目。移除(项目);
存储阵列(项目);
}

另外,如果您没有认真的动机来同步执行此方法,我建议您在保存方法中将
commit()
替换为
apply()
(保存将是异步的)。

从SharePreferences获取json并将其转换为对象部分已经在您的代码中提到过,如果您知道需要删除的对象CartItem,请执行以下步骤

  • CartItem
    中重写
    等于
    ,这将有助于比较列表中的对象
  • Arraylist.conatins(Object)
    如果为true,则继续并删除它<代码>阵列列表。删除(Obejct)

  • 将它从SharedReferences获取到string并用Gson解析到Array,删除该项并再次将其保存到SharedReferences。@ddog您能给我看一些示例代码吗?如何确定要从ArrayList中删除哪个对象?你想在那之后做什么吗?我以异步方式使用这些方法,但是在UI线程上读取SharedReferences似乎很慢,我想我应该使用数据库或文件来代替。@C.B如果你不需要,我从不建议在SP中保存对象。DB是管理自定义模型的最佳方式
    public void removeElement(CartItem item) {
        ArrayList<CartItem> items = readArray();
        items.remove(item);
        saveArray(items);
    }