【问题标题】:Android SharedPreferences crashing when storing a string with a quotation mark存储带引号的字符串时,Android SharedPreferences 崩溃
【发布时间】:2011-08-16 19:17:09
【问题描述】:

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

我得到的错误是 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" 因为它会干扰其他功能。

【问题讨论】:

  • 这很奇怪。 SharedPreferences 的默认 android 实现不使用 SQLite。您的手机型号是什么,Android OS 版本是什么?另外,您如何获得对f_sharedPreferences 的引用?请你显示那部分代码好吗?
  • 我使用的是三星 Galaxy 平板电脑,运行 3.1。我已经更新了我的原始帖子,以展示我是如何获得 f_sharedPreferences 的。谢谢!

标签: android sqlite escaping sharedpreferences orientation-changes


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    android:configChanges="orientation"
    

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

    【讨论】:

    • 这不是一个好的建议。 configChanges 有很多缺点,一般来说,如果没有非常强大(主要是性能)的原因,不应该真正使用它。
    • 很大程度上取决于它的使用方式。仅当用户依赖于其他配置更改时才会不赞成 - 例如多个布局。我将它用于我开发的应用程序,该应用程序在 Android Market 上,并且运行良好。
    • 我不能使用这个方法,因为它会干扰我正在实现的其他功能。不过谢谢!
    • @Phil,这种方法被认为是最后的手段。你应该阅读:developer.android.com/guide/topics/resources/…
    猜你喜欢
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2012-09-03
    • 2013-05-04
    • 1970-01-01
    相关资源
    最近更新 更多