Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用查找键在android中检索联系人的详细信息?_Android_Cursor_Android Contacts_Loader - Fatal编程技术网

如何使用查找键在android中检索联系人的详细信息?

如何使用查找键在android中检索联系人的详细信息?,android,cursor,android-contacts,loader,Android,Cursor,Android Contacts,Loader,我尝试过使用这段代码,但无法从onLoadFinished方法检索数据,我得到了cursor.columnCount=7和cursor.getCount=0。每当我试图检索数据时,比如- cursor.getString(cursor.getColumnIndex(projection[0]))我说大小为0和索引为0时出错 private static final String[] PROJECTION = { ContactsContract.D

我尝试过使用这段代码,但无法从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) {

}
私有静态最终字符串[]投影=
{
Contacts contract.Data.PHOTO\u缩略图\u URI,
Contacts contract.Data.DISPLAY\u NAME,
Contacts contract.CommonDataTypes.Phone.\u ID,
Contacts contract.CommonDataTypes.Email.ADDRESS,
ContactsContract.CommonDataTypes.Email.TYPE,
Contacts contract.CommonDataTypes.Email.LABEL,
ContactsContract.CommonDataTypes.Email.ADDRESS
};
私有静态final int DETAILS\u QUERY\u ID=0;
私有静态最终字符串选择=contacts contract.Data.LOOKUP_KEY+“=?”;
私有字符串[]selectionArgs={”“};
字符串查找键;
@凌驾
ActivityCreated上的公共无效(@Nullable Bundle savedinStateCState){
super.onActivityCreated(savedInstanceState);
lookupKey=getArguments().getString(“lookupKey”);
getLoaderManager().initLoader(详细信息\u查询\u ID,null,this);
}
@凌驾
公共加载器onCreateLoader(int-loaderId,Bundle-args){
selectionArgs[0]=查找键;
返回新游标装入器(
getActivity(),
contacts contract.Data.CONTENT\u URI,
预测
选择
精选,
无效的
);
}
@凌驾
public void onLoadFinished(加载器,光标){
}
@凌驾
public void onLoaderReset(@NonNull加载程序){
}

}

我将用这句话作为回答: 您的代码似乎正确,但传递的值不正确 您将联系人姓名传递给片段,而不是传递查找键


private static final int CONTACT_KEY_INDEX
更改为
3
,而不是
1
。这应该表示投影数组中
LOOKUP\u KEY
的索引

您的
LOOKUP KEY
看起来如何?您可能使用了错误的值,例如lookupUri或contactId,因为错误。lookup key给我的结果与contact Name相同。代码中一定有错误,post itsee,在这里,当用户单击st view中的特定行contact时,我将lookup key传递给details片段将
private static final int contact\u key\u INDEX
更改为3,不是1。这应该代表您的投影阵列中的
LOOKUP\u KEY
索引,很抱歉您的回复太晚,非常感谢,您最后的第二条评论解决了我的问题,我已将CONTACT\u KEY\u index更改为3,然后砰的一声,我得到了想要的结果。你救了我一天。从昨晚开始我就一直在努力解决这个问题