2017-02-26 247 views
-3

我想從聯繫人列表中獲取姓名和號碼並將其顯示在文本中。代碼的問題是,首先它不會顯示我的聯繫人列表中的所有聯繫人,其次我只嘗試在文本視圖中設置名稱,然後它完美地工作,但是當我嘗試在其他文本視圖中添加數字時,則應用程序崩潰。來自聯繫人列表的Android聯繫人號碼

下面是代碼:

package com.example.hasnainabidkz.getcontactnum; 


     import android.app.Activity; 
     import android.content.Intent; 
     import android.database.Cursor; 
     import android.net.Uri; 
     import android.os.Bundle; 
     import android.provider.Contacts.People; 
     import android.view.View; 
     import android.view.View.OnClickListener; 
     import android.widget.Button; 
     import android.widget.TextView; 
public class MainActivity extends Activity { 
    public static final int PICK_CONTACT = 1; 
    private Button btnContacts; 
    private TextView txtContacts1; 
    private TextView txtContacts2; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btnContacts = (Button) findViewById(R.id.btn_contacts); 
     txtContacts1 = (TextView) findViewById(R.id.txt_contacts_name); 
     txtContacts2 = (TextView) findViewById(R.id.txt_contacts_number); 
     btnContacts.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(Intent.ACTION_PICK, People.CONTENT_URI); 
       startActivityForResult(intent, 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 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.NUMBER)); 

         txtContacts1.setText(name); 
         txtContacts2.setText(number); 


        } 
       } 
       break; 
     } 
    } 
} 
+1

「那麼應用程序崩潰。」顯示堆棧跟蹤 – Zoe

+0

該活動可以定義與視圖中不同的ID。它可能是一個nullpointerexception。這可能是很多事情,並且堆棧跟蹤對於縮小問題是必要的。 – Zoe

回答

0

這是我寫來獲取聯繫人姓名和電話號碼

public class MainActivity extends AppCompatActivity { 

EditText etFirstname, etLastname, etContact; 
ImageView ivContact; 

String contactID; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    etFirstname = (EditText) findViewById(R.id.etFirstname); 
    etLastname = (EditText) findViewById(R.id.etLastname); 
    etContact = (EditText) findViewById(R.id.etContact); 
    ivContact = (ImageView) findViewById(R.id.ivContact); 

    ivContact.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent it= new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
      startActivityForResult(it, 101); 
     } 
    }); 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode == RESULT_OK) { 
     if(requestCode == 101) { 

      retrieveContactName(data.getData()); 
      retrieveContactNumber(data.getData()); 
     } 
    } 

} 


private void retrieveContactNumber(Uri uriContact) { 

    String contactNumber = null; 

    // getting contacts ID 
    Cursor cursorID = getContentResolver().query(uriContact, 
      new String[]{ContactsContract.Contacts._ID}, 
      null, null, null); 

    if (cursorID.moveToFirst()) { 

     contactID = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID)); 
    } 

    cursorID.close(); 

    Log.d("TAG", "Contact ID: " + contactID); 

    // Using the contact ID now we will get contact phone number 
    Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, 

      ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " + 
        ContactsContract.CommonDataKinds.Phone.TYPE + " = " + 
        ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, 

      new String[]{contactID}, 
      null); 

    if (cursorPhone.moveToFirst()) { 
     contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     etContact.setText(contactNumber); 
    } 

    cursorPhone.close(); 

    Log.d("TAG", "Contact Phone Number: " + contactNumber); 
} 

private void retrieveContactName(Uri uriContact) { 

    String contactName = null; 

    // querying contact data store 
    Cursor cursor = getContentResolver().query(uriContact, null, null, null, null); 

    if (cursor.moveToFirst()) { 

     // DISPLAY_NAME = The display name for the contact. 
     // HAS_PHONE_NUMBER = An indicator of whether this contact has at least one phone number. 

     contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     if(contactName.contains(" ")) { 
      etFirstname.setText(contactName.substring(0, contactName.indexOf(" "))); 
      etLastname.setText(contactName.substring(contactName.indexOf(" "), contactName.length())); 
     } else { 
      etFirstname.setText(contactName); 
     } 
    } 

    cursor.close(); 

    Log.d("TAG", "Contact Name: " + contactName); 

} 

您可以在以下網址找到完整的項目在我的github帳戶一個簡單的代碼 https://github.com/arshadkazmi42/Pick-Contact-from-Contacts-List-Android