2

我在共享偏好方面遇到了一些麻烦。我试图在方向更改之前保存搜索框的文本(编辑文本),然后在方向更改后重新创建活动后恢复它。它就像一个魅力......除了编辑文本包含引号时。当有引号并且我旋转设备时,应用程序在尝试以新方向创建活动时崩溃。当有双引号“时,会发生这种唯一的符号,所有其他符号,包括单引号 ',都可以正常工作。

我得到的错误是 android.database.sqlite.SQLiteException: unrecognized token: "" ORDER BY name 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="orientation" 因为它会干扰其他功能。

4

2 回答 2

1

您可以尝试使用DatabaseUtils 中的 sqlEscapeString转义字符串的字符(未经测试,刚刚在 google 上找到)

于 2011-08-16T19:32:01.433 回答
0

好像是安卓的问题。为什么不将此属性添加到清单的活动部分?它将使文本保存,因此您不必存储它。

android:configChanges="orientation"

请记住,这将禁用 Android 处理旋转的默认方式,因此如果您依赖使用不同的纵向/横向布局,您可能希望使用另一种方法。

于 2011-08-16T19:25:17.333 回答