我试图在我的Android应用程序中执行以下查询:
private static final String[] PROJECTION =
{
Data.CONTACT_ID, Data.MIMETYPE,
Data.DISPLAY_NAME, Phone.NUMBER,
Phone.TYPE, StructuredName.GIVEN_NAME,
StructuredName.MIDDLE_NAME,
StructuredName.FAMILY_NAME,
Data.DELETED
};
private static final String SELECTION = "(" + Data.MIMETYPE + " = ? AND "
+ Phone.TYPE + " IN (?,?,?)) OR ("
+ Data.MIMETYPE + " IN (?))";
private static final String[] SELECTION_ARGS =
{
Phone.CONTENT_ITEM_TYPE,
String.valueOf(Phone.TYPE_MOBILE),
String.valueOf(Phone.TYPE_HOME),
String.valueOf(Phone.TYPE_WORK),
StructuredName.CONTENT_ITEM_TYPE
};
final Cursor cursor = mContext.getContentResolver().query(
Data.CONTENT_URI, PROJECTION, SELECTION, SELECTION_ARGS, Data.CONTACT_ID);
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
04-29 11:00:58.715 8588 15565 E DatabaseUtils: Writing exception to …Run Code Online (Sandbox Code Playgroud) 我试着:
这是我为游标构建URI的方法:
// User is searching for 'jo'
String query = "jo";
Uri uri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, Uri.encode(query));
// Restrict the query to contacts from 'example@gmail.com'
Uri.Builder builder = uri.buildUpon();
builder.appendQueryParameter(
ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(ContactsContract.Directory.DEFAULT));
builder.appendQueryParameter(ContactsContract.RawContacts.ACCOUNT_NAME, "example@gmail.com");
builder.appendQueryParameter(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.google");
uri = builder.build();
Run Code Online (Sandbox Code Playgroud)
这是最终的URI:
content://com.android.contacts/contacts/filter/jo?directory=0&account_name=example%40gmail.com&account_type=com.google
Run Code Online (Sandbox Code Playgroud)
目前,这显示了手机上所有帐户的搜索结果.
注意:如果我使用Contacts.CONTENT_URI而不是Contacts.CONTENT_FILTER_URI,则指定目录/帐户按预期工作,但我不能再使用"类型到过滤器"样式搜索.
该文件确实状态:
目录最重要的用例是搜索.目录提供商预计至少会支持
Contacts.CONTENT_FILTER_URI.
任何人都可以帮助指出我可能做错了什么吗?
android contactscontract android-contentprovider android-contacts