Android 我想获取手机中存储的联系人,但遇到问题

Android 我想获取手机中存储的联系人,但遇到问题,android,Android,我使用以下代码从手机中获取联系人 我得到的是姓名,但不是电话号码,请帮助我找到联系人的其他字段 public class DialActivity extends Activity { private ListView mContactList; public String[] fields; public Cursor cursor; public boolean mShowInvisible; public Uri uri; public String[] pr

我使用以下代码从手机中获取联系人 我得到的是姓名,但不是电话号码,请帮助我找到联系人的其他字段

public class DialActivity extends Activity {

private ListView mContactList;

public  String[] fields;
 public  Cursor cursor;
 public    boolean mShowInvisible;
 public   Uri uri;
 public   String[] projection;
 public   String[] selectionArgs;
 public  String selection;
 public  String sortOrder;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    mContactList = (ListView) findViewById(R.id.ListView01);

     // Populate the contact list
    populateContactList();




}

   /**
 * Populate the contact list based on account currently selected in the account spinner.
 */
private void populateContactList() {
    // Build adapter with contact entries
    Cursor cursor = getContacts();
    String[] fields = new String[] {
            ContactsContract.Data.DISPLAY_NAME

    };
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.listrow, cursor,
            fields, new int[] {R.id.TextView01});
    mContactList.setAdapter(adapter);
}

/**
 * Obtains the contact list for the currently selected account.
 *
 * @return A cursor for for accessing the contact list.
 */
private Cursor getContacts()
{
    // Run query
    Uri uri = ContactsContract.Contacts.CONTENT_URI;
    String[] projection = new String[] {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME
    };
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" +
            (mShowInvisible ? "0" : "1") + "'";
    String[] selectionArgs = null;
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

    return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}
}


在上面的代码中,我使用了一个自定义的ListRow布局,并在每一行中显示联系人姓名,但我希望填充一个包含姓名和相应号码的列表,这样我就可以通过单击该listItem来拨打这些号码。我知道如何打电话,但我没有电话号码。

Contacts contract.Contacts不包含电话号码,但您有联系人的id,因此您现在可以查询Contacts contract.Data以获取电话号码。可以在文档中找到一个示例查询:

尝试了它,但在NullPointerException中传递了null结果: