如何使用 LOOKUP KEY 检索 android 中联系人的联系方式?
How to retrieve contact details for contact in android using LOOKUP KEY?
我试过使用此代码,但我无法从 onLoadFinished 方法检索数据,我有 cursor.columnCount=7 和 cursor.getCount=0。每当我试图检索数据时——
cursor.getString(cursor.getColumnIndex(projection[0])) 我收到错误提示,大小为 0,索引为 0。
private static final String[] PROJECTION =
{
ContactsContract.Data.PHOTO_THUMBNAIL_URI,
ContactsContract.Data.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Email.ADDRESS,
ContactsContract.CommonDataKinds.Email.TYPE,
ContactsContract.CommonDataKinds.Email.LABEL,
ContactsContract.CommonDataKinds.Email.ADDRESS
};
private static final int DETAILS_QUERY_ID = 0;
private static final String SELECTION = ContactsContract.Data.LOOKUP_KEY + " = ?";
private String[] selectionArgs = { "" };
String lookupKey;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
lookupKey=getArguments().getString("LOOKUPKEY");
getLoaderManager().initLoader(DETAILS_QUERY_ID, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
selectionArgs[0] = lookupKey;
return new CursorLoader(
getActivity(),
ContactsContract.Data.CONTENT_URI,
PROJECTION,
SELECTION,
selectionArgs,
null
);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
}
@Override
public void onLoaderReset(@NonNull Loader<Cursor> loader) {
}
}
我将把它作为答案:
您的代码似乎是正确的,但传递的值不是
您将联系人姓名传递给片段,而不是传递 lookupKey。
将 private static final int CONTACT_KEY_INDEX
改为 3
,而不是 1
。这应该代表投影数组
中 LOOKUP_KEY
的索引
我试过使用此代码,但我无法从 onLoadFinished 方法检索数据,我有 cursor.columnCount=7 和 cursor.getCount=0。每当我试图检索数据时—— cursor.getString(cursor.getColumnIndex(projection[0])) 我收到错误提示,大小为 0,索引为 0。
private static final String[] PROJECTION =
{
ContactsContract.Data.PHOTO_THUMBNAIL_URI,
ContactsContract.Data.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Email.ADDRESS,
ContactsContract.CommonDataKinds.Email.TYPE,
ContactsContract.CommonDataKinds.Email.LABEL,
ContactsContract.CommonDataKinds.Email.ADDRESS
};
private static final int DETAILS_QUERY_ID = 0;
private static final String SELECTION = ContactsContract.Data.LOOKUP_KEY + " = ?";
private String[] selectionArgs = { "" };
String lookupKey;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
lookupKey=getArguments().getString("LOOKUPKEY");
getLoaderManager().initLoader(DETAILS_QUERY_ID, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
selectionArgs[0] = lookupKey;
return new CursorLoader(
getActivity(),
ContactsContract.Data.CONTENT_URI,
PROJECTION,
SELECTION,
selectionArgs,
null
);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
}
@Override
public void onLoaderReset(@NonNull Loader<Cursor> loader) {
}
}
我将把它作为答案: 您的代码似乎是正确的,但传递的值不是 您将联系人姓名传递给片段,而不是传递 lookupKey。
将 private static final int CONTACT_KEY_INDEX
改为 3
,而不是 1
。这应该代表投影数组
LOOKUP_KEY
的索引