查询内容提供商时为列添加别名?

时间:2012-07-17 20:37:14

标签: android android-contentprovider android-contentresolver

我正在尝试在用户搜索联系人时在搜索对话框中显示自定义建议。自定义建议要求Content Provider返回一个列,其列之一名为SearchManager.SUGGEST_COLUMN_TEXT_1

我正在查询联系人提供者,声明投影如下:

String[] projection = new String[]{Contacts._ID,Contacts.DISPLAY_NAME + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_1};

但这是抛出异常:

java.lang.IllegalArgumentException: Invalid column display_name AS suggest_text_1

我一直在研究,这是因为联系人提供商在strictProjectionMap中设置了SQLiteQueryBuilder标记,所以我想知道某人是否有解决方法可以指定别名。我找到了几个解决方案,但那些需要修改内容提供商,在这种情况下,它是不可能的,因为它是一个Android提供商。

如果不可能,这种情况的最佳做法是什么?我目前的解决方案是使用正确的列名创建MatrixCursor并将从查询返回的光标中的所有值复制到Contacts提供程序,但在效率方面感觉非常错误,所以我认为可能会有更好的方式。

感谢您的建议。 涓

0 个答案:

没有答案