Android - Удаление пары "ключ-значение" из общих настроек

У меня есть список, который загружается из общих предпочтений. когда пользователь нажимает на кнопку «Удалить», он должен быть удален из списка и уничтожен. Моя проблема в том, что конкретный элемент не удаляется из общих настроек, для этого я использовал приведенный ниже код,

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>

когда пользователь нажимает на кнопку «Удалить», я хочу удалить эти 3 строки из файла предпочтений. Как удалить всю строку? В списке отображается только имя (ЯБЛОКО).


person Brinda K    schedule 15.11.2012    source источник
comment
Вы звонили commit() после?   -  person Maxim Shoustin    schedule 15.11.2012
comment
Это будет последняя строчка кода. Бринда. Пожалуйста, покажите, как устанавливаются указатель и элементы. Вы также злоупотребляете sharedPreferences. Это нужно делать в SQLite. У вас всегда будут проблемы с этим кодом, поскольку вы пытаетесь использовать нереляционное хранилище данных для реляционных данных.   -  person Simon    schedule 15.11.2012
comment
@Simon да, но это не большие данные для хранения в SQLite, поэтому я использовал общие настройки.   -  person Brinda K    schedule 15.11.2012
comment
Насколько велики данные - не лучший тест. Серьезно, в будущем вам захочется, чтобы вы не использовали этот подход.   -  person Simon    schedule 15.11.2012
comment
@Simon да, вы правы, спасибо за предложение. Я буду использовать этот подход. Но я хочу знать, в чем проблема в приведенном выше коде.   -  person Brinda K    schedule 15.11.2012


Ответы (2)


Ошибка в сети:

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

должен быть

editor.remove("deviceId" + String.valueOf(index)); 

Возможно, вы также хотите удалить ключ deviceSize:

editor.remove("deviceSize");

перед совершением.

Ваш код не очень понятен. Сделайте его более читабельным.

person Snicolas    schedule 15.11.2012
comment
Я не хочу удалять deviceSize, я должен уменьшать значение только при удалении элемента. На самом деле он работает, но эти deviceName и Ids не удаляются. Я пытался изменить этот deviceId на index, но не работал. - person Brinda K; 15.11.2012

Вы можете попробовать:

settings.edit().remove("deviceId" + String.valueOf(deviceid)).apply();
person wick.ed    schedule 26.05.2017