我正在尝试在用户搜索联系人时在搜索对话框中显示自定义建议。自定义建议要求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提供程序,但在效率方面感觉非常错误,所以我认为可能会有更好的方式。
感谢您的建议。 涓