Сбой Android SharedPreferences при сохранении строки с кавычкой - PullRequest
2 голосов
/ 16 августа 2011

У меня проблемы с общими настройками.Я пытаюсь сохранить текст окна поиска (текст редактирования) перед изменением ориентации, а затем восстановить его после повторного создания действия после изменения ориентации.Он работает как шарм .... кроме случаев, когда текст редактирования содержит кавычку.Когда есть кавычка и я поворачиваю устройство, приложение вылетает при попытке создать действие в новой ориентации.Этот ЕДИНСТВЕННЫЙ символ это происходит, когда есть двойная кавычка ", все другие символы, включая одинарную кавычку", работают нормально.

Я получаю ошибку: android.database.sqlite.SQLiteException: unrecognized token: ""ЗАКАЗАТЬ по названию COLLATE NOCASE".Я предполагаю, что «мешает написанию SQL-запросов. Я пытался заменить все« с »перед сохранением их в SharedPreferences, а затем заменить все« на »при получении строки обратно. Я все еще получаю то же самоеКто-нибудь знает, как это исправить?

Мой код выглядит следующим образом:

@Override
public void onResume()
{
    super.onResume();
    String searchText = f_sharedPreferences.getString("searchText", "");
    f_searchBox.setText(searchText);
}

@Override
public void onPause()
{
    super.onPause();
    String searchText = f_searchBox.getText().toString();
    f_sharedPreferences.edit().putString("searchText", searchText).commit();
}

Спасибо! Ваша помощь очень ценится.

РЕДАКТИРОВАТЬ: В моем onCreateметод, я получаю f_sharedPreferences со следующей строкой:

    f_sharedPreferences = getSharedPreferences(this.getClass().getName(), Context.MODE_PRIVATE);

Также я не могу использовать android: configChanges = "direction", так как это мешает другим функциям.

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Вы можете попробовать экранировать символы вашей строки с помощью sqlEscapeString из DatabaseUtils (не тестировалось, только что нашел его в Google)

0 голосов
/ 16 августа 2011

Похоже, проблема с Android.Почему бы просто не добавить этот атрибут в часть «Активность» своего манифеста?Это сохранит текст, поэтому вам не нужно его сохранять.

android:configChanges="orientation"

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

...