2014-11-13 3 views
2

Я новичок в разработке Android, и я полностью застрял сейчас! , так что я надеюсь, что вы мне поможете!номер телефона с устройства возвращается 0

Так что - я пытаюсь получить номер телефона и адрес электронной почты от контакта, в группе выбора контактов. , но когда я показываю вывод, он говорит, что он равен 0 и null. что я делаю неправильно? вот код!

if (view == btnPhonebook2) { 
     Intent intent = new Intent(Intent.ACTION_PICK, People.CONTENT_URI); 
     startActivityForResult(intent, PICK_CONTACT); 
    } 

    public void onActivityResult(int reqCode, int resultCode, Intent data) { 
    super.onActivityResult(reqCode, resultCode, data); 
    switch (reqCode) { 
    case (PICK_CONTACT): 
     if (resultCode == Activity.RESULT_OK) { 
      // String id = null; 
      // FIRST TRY 

       Uri contactData = data.getData(); Cursor c = managedQuery(contactData, null, null, null, null); 
       if(c.moveToFirst()) { 
        String name = c.getString(c.getColumnIndexOrThrow(People.NAME)); 
        int number = c.getInt(c.getColumnIndexOrThrow(People.PRIMARY_PHONE_ID)); 
        String email = c.getString(c.getColumnIndexOrThrow(People.PRIMARY_EMAIL_ID)); 


       //+" : c.getInt(c.getColumnIndexOrThrow(People.NUMBER)); 
       Toast.makeText(getApplicationContext(),"you selected : "+name+"\n With the telephone number :"+number+"\n And the email :"+email,Toast.LENGTH_LONG).show(); 

       DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         switch (which){ 
         case DialogInterface.BUTTON_POSITIVE: 
          Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "60158096")); 
           startActivity(intent); 
          break; 

         case DialogInterface.BUTTON_NEGATIVE: 
          Intent email = new Intent(Intent.ACTION_SEND); 
           email.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});   
           email.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
           email.putExtra(Intent.EXTRA_TEXT, "message"); 
           email.setType("message/rfc822"); 
           startActivity(Intent.createChooser(email, "Choose an Email client :")); 
          break; 
         } 
        } 
       }; 

       AlertDialog.Builder builder = new AlertDialog.Builder(this); 
       builder.setMessage("How will you contact: "+name).setPositiveButton("Call", dialogClickListener) 
        .setNegativeButton("Email", dialogClickListener).show(); 

, когда я показываю название строки - это получается отлично !?

+0

Поделитесь еще несколькими кодами, такими как getData(); – Piyush

+1

Кажется, что функция bild для извлечения данных из намерения «Получить данные, на которых это намерение работает. Этот URI указывает имя данных, часто он использует схему контента: указание данных в поставщике контента. могут обрабатываться конкретными действиями, такими как http: через веб-браузер ». – Stender

+0

, но я могу поделиться еще, хотя я уверен, что моя ошибка находится в опубликованном разделе. – Stender

ответ

1

Я ответил на что-то подобное до here.

ContentResolver cr = getContentResolver(); 
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
String phone = null; 
if (cur.getCount() > 0) { 
    while (cur.moveToNext()) { 
    String id = cur.getString(cur .getColumnIndex(ContactsContract.Contacts._ID)); 
    if (Integer .parseInt(cur.getString(cur.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()) { 
     phone = pCur .getString(pCur .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     // This was the phone number for that contact id... 
     } 
    pCur.close(); 
    Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[] { id }, null); 
    while (emailCur.moveToNext()) { 
    // For Email 
     emailContact = emailCur .getString(emailCur .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
     emailType = emailCur .getString(emailCur .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); 
    } 
    } 
} 

Аналогичным образом вы можете получить image uri.
Проблема с кодом здесь:

String name = c.getString(c.getColumnIndexOrThrow(People.NAME)); 
int number = c.getInt(c.getColumnIndexOrThrow(People.PRIMARY_PHONE_ID)); 
String email = c.getString(c.getColumnIndexOrThrow(People.PRIMARY_EMAIL_ID)); 

Используйте String типа вместо INT, и Contacts.People class is deprecated from api 5. Также People.PRIMARY_PHONE_ID предоставит вам идентификатор, а не номер телефона.

String id = c.getString(c.getColumnIndex(People.PRIMARY_PHONE_ID)); 
+0

, но этот метод не будет реализован так, как я делаю это сейчас? будет ли он? – Stender

+0

Код будет служить вашей цели, я думаю. –

+0

будет реализован в вашем коде, почему бы и нет? –

Смежные вопросы