0

我使用 ContactsQuery 在设备上搜索联系人姓名。我的代码与github 上的 sampleContactsActivity非常相似:

但是,当我在联系人搜索栏上输入数字键时,应用程序会引发 SQLiteException。

我使用的选择查询是:

final static String SELECTION =
            (Helper.hasHoneycomb() ? Contacts.DISPLAY_NAME_PRIMARY : Contacts.DISPLAY_NAME) +
            "<>''" + " AND " + Contacts.IN_VISIBLE_GROUP + "=1";

当我输入数字键“6”时,日志中显示的错误消息是:

  android.database.sqlite.SQLiteException: near ":6": syntax error (code 1): , while compiling: SELECT _id, lookup, display_name, photo_thumb_uri, sort_key FROM view_contacts_restricted JOIN (SELECT contact_id AS snippet_contact_id FROM search_index WHERE search_index MATCH content:6*  OR name:1E* UNION  SELECT contact_id AS snippet_contact_id FROM phone_lookup JOIN raw_contacts ON ( raw_contacts._id=raw_contact_id) WHERE normalized_number LIKE '%6%') ON (_id=snippet_contact_id) WHERE ((display_name<>'' AND in_visible_group=1)) ORDER BY sort_key

此问题仅发生在其中一款三星 Galaxy III 设备上。

4

2 回答 2

0

我通过在格式化 SQL 查询搜索之前将数字转换为字符串解决了这个问题。我怀疑在该特定设备上,联系人提供程序实现不会自动将数字转换为字符串,并最终导致 SQL 语法错误。

我还注意到特殊字符键也有问题。所以我只是将 '' 添加到所有非字符输入

于 2013-08-31T07:34:30.667 回答
0

这是格式化 SQL 查询的代码中的一个错误,该代码位于联系人提供程序实现中,它是该设备固件的一部分。

如果可能,请更新该设备上的 Android 版本,或避免进行号码搜索。

于 2013-08-30T09:22:03.163 回答