Поиск контактов в приложении Android

Я следил за этими ссылками, чтобы получить контакты в моем приложении

Как позвонить в список контактов Android?

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

Я могу отображать список контактов по телефону, но

  1. Я хочу добавить флажок на каждом контакте, чтобы пользователь мог выбрать несколько контактов, и нажав кнопку «Готово», он должен получить все контакты, которые он выбрал

  2. Также я хочу получить имя контакта, а также номер телефона контакта, см. Мой код:

     If (resultCode == Activity.RESULT_OK) {
                     Uri contactData = data.getData ();
                     Cursor c = managedQuery (contactData, null, null, null, null);
                     If (c.moveToFirst ()) {
                         Строковое имя = c.getString (c
                                 .getColumnIndexOrThrow (ContactsContract.Contacts.DISPLAY_NAME));
                         Строковое число = c.getString (c.getColumnIndexOrThrow (ContactsContract.Contacts.HAS_PHONE_NUMBER));
                         Log.v («имя», имя + «» + номер);
                         // TODO Что бы вы ни делали с выбранным контактом
                         // имя.
                     }
                 }

На log cat он показывает результат как:

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

Это имя контакта xyz, и у него есть по крайней мере 1 номер телефона, связанный с ним. Пожалуйста, помогите мне в том, как я могу получить номер, связанный с этим контактом.

РЕДАКТИРОВАТЬ :

Если я использую это ( String number = c.getString(c.getColumnIndexOrThrow(People.NUMBER)); ) строка в коде, я получаю следующее исключение:

 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 

Solutions Collecting From Web of "Поиск контактов в приложении Android"

Увидев ответы, я думаю, вы получили ответ, как получить контакты, и теперь вы хотите получить выбранные контакты в своей деятельности.

Чтобы получить контактный номер, специфичный для имени контакта:

 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() ); } 

Примечание. Здесь contactName – это имя контакта, с которым вы хотите связаться с номерами контактов.

Я предполагаю, что вы указали контакты с флажком в ListView, и вот ваше решение, чтобы получить список контактов, выбранный пользователем для вашей деятельности:

1. Запустите свою контактную деятельность с помощью startActivityForResult() .

2. Инициализируйте переменную ArrayList в контактной активности, скажем, contactArrayList .

3. Когда пользователь checks the checkbox , добавьте этот контакт в свой contactArrayList и продолжайте добавлять, а когда unchecks удаление, удалите контакт из contactArrayList .

4. Когда пользователь нажимает, затем установите результат ok с выбранным списком контактов, который вы добавили в contactArrayList следующим образом:

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

И finish() эту активность.

5. При переопределении вызывающей активности:

 @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"); } } 

Примечание . Вышеупомянутый код был проверен в версии 2.3.3.

Попробуйте этот код

 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(); 

Здесь у вас есть курсор c

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

Получить имя

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

Получить номер

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

Вы можете перебирать курсор и сохранять их в списке. Создайте представление списка флажков и привяжите его к этому списку.

Просто имейте контактный объект данных, и всякий раз, когда вы выбираете какой-либо элемент в списке, задайте значение этого контакта в этом поле.

в

 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(); } } } 

Попробуйте код ниже:

 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() ); }