Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Brinda KОтветов: 2

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

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 строки из файла предпочтений. Как удалить всю строку? В списке отображается только имя (ЯБЛОКО).

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

androidsharedpreferences

Ответы

Ответ 1 · рейтинг 5 · Snicolas

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

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

должен быть

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

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

editor.remove("deviceSize");

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

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

Ответ 2 · wick.ed

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы