Android-从共享首选项中删除键值对

Android-从共享首选项中删除键值对,android,sharedpreferences,Android,Sharedpreferences,我有一个从共享首选项加载的列表视图。当用户单击“删除”时,它应该从列表中删除并分解首选项。我的问题是,特定项目没有从共享首选项中删除,为此我使用了下面的代码 SharedPreferences settings = getSharedPreferences( OptionsActivity.PREFS_NAME, 0); int deviceSize = settings.getInt("deviceSize", 0); SharedPreferences.Editor editor = set

我有一个从共享首选项加载的列表视图。当用户单击“删除”时,它应该从列表中删除并分解首选项。我的问题是,特定项目没有从共享首选项中删除,为此我使用了下面的代码

SharedPreferences settings = getSharedPreferences(
OptionsActivity.PREFS_NAME, 0);
int deviceSize = settings.getInt("deviceSize", 0);
SharedPreferences.Editor editor = settings.edit();
String deviceName = items.get(index);
editor.remove(deviceName + String.valueOf(items.get(index)));
editor.remove("deviceName" + String.valueOf(index));
int deviceid = settings.getInt("deviceId"+String.valueOf(items.get(index)),0);
editor.remove("deviceId" + String.valueOf(deviceid));
editor.putInt("deviceSize", deviceSize - 1);
editor.commit();
通过这段代码,只有deviceSize-1在工作,所以它似乎被从列表中删除了,但当我看到共享首选项文件时,它并没有工作。 下面是我的共享首选项文件

   <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
   <map>
   <string name="deviceName1">APPLE</string>//delete when click on delete
   <int name="deviceId1" value="0" /> //delete when click on delete
   <int name="deviceSize" value="1" /> //decrease by one when item deleted
   </map>

APPLE//单击“删除”时删除
//单击“删除”时删除
//删除项目时减少1

当用户单击delete时,我想从首选项文件中删除这3行。如何删除整行?列表仅显示名称(APPLE)。

第行有错误:

editor.remove("deviceId" + String.valueOf(deviceid));
应该是

editor.remove("deviceId" + String.valueOf(index)); 
也许您还想删除deviceSize键:

editor.remove("deviceSize");
在提交之前

你的代码不是很清楚。使其更具可读性。

您可以尝试:

settings.edit().remove("deviceId" + String.valueOf(deviceid)).apply();

您是否在之后调用了
commit()
?这将是最后一行代码。布林达。请显示如何设置索引和项目。您也在滥用SharedReference。这应该在SQLite中完成。因为您试图使用非关系数据存储来存储关系数据,所以此代码总是会有问题。@Simon是的,但在SQLite中存储的数据不是大数据,所以我使用了共享首选项。数据有多大不是正确的测试。说真的,将来你会希望你没有使用这种方法。@Simon是的,你是对的,谢谢你的建议。我将采用这种方法。但是我想知道上面代码中的问题是什么。我不想删除deviceSize,我应该只在项目被删除时减小值。实际上它可以工作,但是那些deviceName和ID没有被删除。我试图将该deviceId更改为index,但没有工作。