Android 无法加载联系人

Android 无法加载联系人,android,load,contacts,Android,Load,Contacts,我已经尝试了许多可用的例子来帮助从手机加载联系人。它在emulator上运行良好,但当我在实时移动设备上尝试时,它崩溃了。有谁能给我发送一段工作完美的测试代码吗。然后我可以与我的代码进行比较 一个失败的代码示例 Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); if (phones.getCount() >

我已经尝试了许多可用的例子来帮助从手机加载联系人。它在emulator上运行良好,但当我在实时移动设备上尝试时,它崩溃了。有谁能给我发送一段工作完美的测试代码吗。然后我可以与我的代码进行比较

一个失败的代码示例

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
if (phones.getCount() > 0)
{
    while (phones.moveToNext())
    {
            name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

    }
phones.close();

请提供帮助。

首先,在清单文件中添加以下内容:

  <uses-permission android:name="android.permission.READ_CONTACTS"/>

确保
phones
不是
null
。如果不是
null
添加此行以将指针移动到第一部手机:

cursor.moveToFirst();
下面是一些代码片段,作为其工作原理的示例:

Uri contactData = data.getData();
    //Cursor cursor =  managedQuery(contactData, null, null, null, null);
    Cursor cursor =  cr.query(contactData, null, null, null, null);
    cursor.moveToFirst();
    String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
    String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));



    if (Integer.parseInt(cursor.getString(
            cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
        Cursor pCur = cr.query(
                                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                                null, 
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                                new String[]{id},
                                null);

        while (pCur.moveToNext()) {
            String number = pCur.getString(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));

            break; // ? we want only 1 value
        } 
        pCur.close();
    }

    cursor.close();

假设它将帮助您

请从崩溃中添加stacktrace。
Uri contactData = data.getData();
    //Cursor cursor =  managedQuery(contactData, null, null, null, null);
    Cursor cursor =  cr.query(contactData, null, null, null, null);
    cursor.moveToFirst();
    String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
    String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));



    if (Integer.parseInt(cursor.getString(
            cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
        Cursor pCur = cr.query(
                                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                                null, 
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                                new String[]{id},
                                null);

        while (pCur.moveToNext()) {
            String number = pCur.getString(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));

            break; // ? we want only 1 value
        } 
        pCur.close();
    }

    cursor.close();