2012-01-09 32 views
13

Tôi đã làm theo các liên kết để có được địa chỉ liên lạc trong ứng dụng của tôiFetch Danh bạ trong ứng dụng android

How to call Android contacts list?

http://www.higherpass.com/Android/Tutorials/Working-With-Android-Contacts/

tôi có thể hiển thị danh sách các địa chỉ liên lạc trên điện thoại nhưng

-

  1. Tôi muốn thêm một hộp kiểm ở mỗi liên lạc để người dùng có thể chọn nhiều danh bạ và bằng cách nhấn vào nút thực hiện, ông sẽ có thể để có được tất cả các địa chỉ liên lạc ông chọn

  2. Ngoài ra tôi muốn có được tên tiếp xúc cũng như điện thoại số liên lạc, thấy mã của tôi:

 
    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(ContactsContract.Contacts.DISPLAY_NAME)); 
         String number = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
         Log.v("name", name +" "+number); 
         // TODO Whatever you want to do with the selected contact 
         // name. 
        } 
       } 

trên log mèo nó cho thấy đầu ra như:

01-09 12:46:41.688: V/name(699): Xyz 1 

đó là tên liên hệ là xyz và nó có ít nhất 1 số điện thoại được liên kết với nó.Xin vui lòng giúp tôi về cách tôi có thể nhận được số liên kết với liên hệ đó.

EDIT:

nếu tôi sử dụng này (String number = c.getString(c.getColumnIndexOrThrow(People.NUMBER));) dòng trong mã tôi nhận được ngoại lệ sau đây:

01-09 13:33:23.008: E/AndroidRuntime(786): FATAL EXCEPTION: main 
01-09 13:33:23.008: E/AndroidRuntime(786): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r1-2C2E30/1 (has extras) }} to activity {sra.com/sra.com.ContactsDemo}: java.lang.IllegalArgumentException: column 'number' does not exist 
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.deliverResults(ActivityThread.java:3515) 
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557) 
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.access$2800(ActivityThread.java:125) 
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063) 
01-09 13:33:23.008: E/AndroidRuntime(786): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-09 13:33:23.008: E/AndroidRuntime(786): at android.os.Looper.loop(Looper.java:123) 
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.main(ActivityThread.java:4627) 
01-09 13:33:23.008: E/AndroidRuntime(786): at java.lang.reflect.Method.invokeNative(Native Method) 
01-09 13:33:23.008: E/AndroidRuntime(786): at java.lang.reflect.Method.invoke(Method.java:521) 
01-09 13:33:23.008: E/AndroidRuntime(786): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
01-09 13:33:23.008: E/AndroidRuntime(786): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
01-09 13:33:23.008: E/AndroidRuntime(786): at dalvik.system.NativeStart.main(Native Method) 
01-09 13:33:23.008: E/AndroidRuntime(786): Caused by: java.lang.IllegalArgumentException: column 'number' does not exist 
01-09 13:33:23.008: E/AndroidRuntime(786): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314) 
01-09 13:33:23.008: E/AndroidRuntime(786): at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:99) 
01-09 13:33:23.008: E/AndroidRuntime(786): at sra.com.ContactsDemo.onActivityResult(ContactsDemo.java:49) 
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.Activity.dispatchActivityResult(Activity.java:3890) 
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.deliverResults(ActivityThread.java:3511) 
01-09 13:33:23.008: E/AndroidRuntime(786): ... 11 more 
+0

cũng thấy câu hỏi này của tôi và giúp tôi giải quyết nó http://stackoverflow.com/questions/8831310/android-contacts-on-listview – Shruti

+0

Bạn đã có được điều này làm việc cuối cùng? Tôi đang cố gắng triển khai nhưng vẫn phải đối mặt với một số vấn đề về chương trình Thêm & Từ danh bạ trước khi tôi quay lại chọn địa chỉ liên hệ cụ thể –

Trả lời

9

Bằng nhìn thấy những câu trả lời, tôi nghĩ bạn có câu trả lời làm thế nào để lấy địa chỉ liên lạc và bây giờ bạn muốn có được địa chỉ liên lạc được lựa chọn trên hoạt động của bạn.

Để lấy số điện thoại cụ thể cho các tên liên lạc:

ContentResolver contactResolver = getContentResolver(); 
Cursor cursor = contactResolver.query(Phone.CONTENT_URI, null, Phone.DISPLAY_NAME + "=?", new String[]{contactName}, null); 

if(cursor.getCount() > 0){ 
    cursor.moveToFirst(); 
    do { 
     String number = cursor.getString(mCursor.getColumnIndex(Phone.NUMBER)); 
    }while (cursor.moveToNext()); 
} 

Lưu ý: Đây contactName là tên liên lạc trong đó bạn muốn fecth số liên lạc.

Tôi giả định rằng bạn đã chỉ ra các điểm tiếp xúc với hộp kiểm trong ListView và đây là giải pháp của bạn để có được danh sách liên lạc của người dùng lựa chọn để hoạt động của bạn:

1. Bắt đầu hoạt động liên hệ của bạn với startActivityForResult().

2. Khởi tạo ArrayList biến hoạt động liên hệ cho biết là contactArrayList.

3. Khi người dùng checks the checkbox, thêm liên hệ này trong contactArrayList của bạn và tiếp tục bổ sung và khi unchecks sau đó loại bỏ các liên lạc từ contactArrayList.

4. Khi ép người dùng thực hiện sau đó thiết lập các kết quả ok với danh sách liên lạc được lựa chọn mà bạn đã thêm vào trong contactArrayList như thế này:

Intent intent = new Intent(); 
Bundle bundle = new Bundle(); 
bundle.putStringArrayList("contacts", contactArrayList); 
intent.putExtras(bundle); 
setResult(RESULT_OK, intent); 

finish() hoạt động này.

5. On gọi hoạt động ghi đè của bạn:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
     if(resultCode == RESULT_OK && data != null){ 
      Bundle bundle = new Bundle(); 
      bundle = data.getExtras(); 
      ArrayList list = bundle.getStringArrayList("contacts"); 
    } 
} 

Lưu ý: Đoạn mã trên đã được thử nghiệm trên 2.3.3.

2

Tại đây bạn đã có con trỏ c

Cursor c = getContentResolver().query(Phones.CONTENT_URI, null, null,null, null); 

để có được tên

String name = c.getString(c.getColumnIndex(People.NAME)); 

để có được số

String number = c.getString(c.getColumnIndex(People.NUMBER)); 

Bạn có thể lặp qua các con trỏ và lưu chúng vào một danh sách. Tạo chế độ xem danh sách hộp kiểm và liên kết với danh sách đó.

+0

Cảm ơn bạn đã trả lời nhưng bây giờ vui lòng xem chỉnh sửa – Shruti

+0

bạn đang thử nghiệm trên trình giả lập hoặc trên điện thoại? – NyanLH

+0

Bạn cần có số liên lạc trong danh sách liên lạc của mình. – NyanLH

4

Vui lòng thử mã này

Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    String name, number = ""; 
    String id; 
    c.moveToFirst(); 
    for (int i = 0; i < c.getCount(); i++) { 
     name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); 

     if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
      Cursor pCur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, 
        null); 
      while (pCur.moveToNext()) { 
       number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      } 
     } 
     Log.i("name ", name + " "); 
     Log.i("number ", number + " "); 
     c.moveToNext(); 
+0

bằng cách sử dụng đoạn mã này tôi nhận được tất cả địa chỉ liên hệ nhưng tôi muốn chỉ nhận được địa chỉ liên hệ đã chọn và hiển thị tên của người liên hệ đó và số trên danh sách của tôi xem .. làm thế nào tôi có thể làm điều đó? – Shruti

2

đơn giản, có một đối tượng dữ liệu liên lạc, và bất cứ khi nào bạn chọn bất kỳ mục trong danh sách, thiết lập giá trị của số liên lạc đó vào lĩnh vực này.

trong

AdapterView.onItemClickListener() 
{ 
    public void onItemClick(AdapterView list, View view, int position, long id) 
    { 
     Contact contact=listContacts.get(position); 
     selectedContact=contact;//If Done Button on List 
     //if activity is to be finished on selection 
     { 
     Intent intent=new Intent(); 
     intent.putExtra(KEY_NAME, contact.Name); 
     .... 
     setResult(RESULT_OK, intent); 
     finish(); 
     } 
    } 
} 
1

Hãy thử đoạn code dưới đây:

ContentResolver contactResolver = getContentResolver();  
Cursor cursor = contactResolver.query(Phone.CONTENT_URI, null, Phone.DISPLAY_NAME + "=?", new String[]{contactName}, null);  
if(cursor.getCount() > 0){  
    cursor.moveToFirst();  
    do {  
     String number = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));  
    }while (cursor.moveToNext());  
} 
Các vấn đề liên quan