Java 在startActivityForResult()之后检索联系人姓名和电话

Java 在startActivityForResult()之后检索联系人姓名和电话,java,android,Java,Android,我已经开始了一项新的意图活动,以获得结果 代码: 现在我想得到电话和号码: protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == RESULT_OK){ Uri contactUri = data.getData(); String

我已经开始了一项新的意图活动,以获得结果 代码:

现在我想得到电话和号码:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {

        if(resultCode == RESULT_OK){

            Uri contactUri = data.getData();

            String[] pN = {Phone.NUMBER};

            String[] pNa = {Phone.CONTACT_ID};//idk

            Cursor cP = getContentResolver().query(contactUri, pN, null, null, null);
            cP.moveToFirst();

            Cursor cPa = getContentResolver().query(contactUri, pNa, null, null, null);
            cPa.moveToFirst();

            int numc = cP.getColumnIndex(Phone.NUMBER);
            String num = cP.getString(numc);

            int namec = cPa.getColumnIndex(Phone.CONTACT_ID);//idk
            String name = cPa.getString(namec);//idk

            Log.i("", name);

        }
        if (resultCode == RESULT_CANCELED) {
            //DO OTHER STUFF
        }
    }
}   

电话号码很好,但我无法检索联系人的姓名

试试这段代码,它可能有助于进行一些小的更改

  static final int PICK_CONTACT_=1;

  Intent intent_1 = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
  startActivityForResult(intent_1, PICK_CONTACT_);


  @Override
 public void onActivityResult(int reqCode, int resultCode, Intent data) {
 super.onActivityResult(reqCode, resultCode, data);

 switch (reqCode) {
 case (PICK_CONTACT_) :
   if (resultCode == Activity.RESULT_OK) {

     Uri contactData = data.getData();
     Cursor cursor =  managedQuery(contactData, null, null, null, null);
     if (cursor.moveToFirst()) {


         String id =cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

         String hasPhone =cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

           if (hasPhone.equalsIgnoreCase("1")) {
          Cursor phones = getContentResolver().query( 
                       ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
                       ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id, 
                       null, null);
             phones.moveToFirst();
              cNumber = phones.getString(phones.getColumnIndex("data_1"));
             System.out.println("number is:"+cNumber);
           }
         String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));


     }
   }
   break;
 }
 }

联系人的名字是
DISPLAY_name
,而不是
contact_ID
String hasPhone=cursor.getString(cursor.getColumnIndex(Contacts contract.Contacts.HAS_PHONE_NUMBER));抛出错误这是因为,在您的情况下,它是'Number'而不是'HAS_PHONE_Number',所以您应该做一些小的更改以符合您的要求。好的,等我测试一下,没有Contacts contract.Contacts.Number这样的东西
  static final int PICK_CONTACT_=1;

  Intent intent_1 = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
  startActivityForResult(intent_1, PICK_CONTACT_);


  @Override
 public void onActivityResult(int reqCode, int resultCode, Intent data) {
 super.onActivityResult(reqCode, resultCode, data);

 switch (reqCode) {
 case (PICK_CONTACT_) :
   if (resultCode == Activity.RESULT_OK) {

     Uri contactData = data.getData();
     Cursor cursor =  managedQuery(contactData, null, null, null, null);
     if (cursor.moveToFirst()) {


         String id =cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

         String hasPhone =cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

           if (hasPhone.equalsIgnoreCase("1")) {
          Cursor phones = getContentResolver().query( 
                       ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
                       ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id, 
                       null, null);
             phones.moveToFirst();
              cNumber = phones.getString(phones.getColumnIndex("data_1"));
             System.out.println("number is:"+cNumber);
           }
         String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));


     }
   }
   break;
 }
 }
 Uri uri = data.getData();

        Cursor cursor = getContentResolver().query(uri, null, null, null, null);

        cursor.moveToFirst();
        name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

        cursor.moveToFirst();
        number = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));