简体   繁体   中英

getting all phone book contact details into an array in android

I am getting all the phonebook contact details as an array. For that I wrote the following code:

package com.android.toggle2;

import java.util.ArrayList;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import android.app.ListActivity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;


public class Toggle3 extends ListActivity 
{
    ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        Cursor mCursor = getContacts();
        startManagingCursor(mCursor);
        // Now create a new list adapter bound to the cursor.
        // SimpleListAdapter is designed for binding to a Cursor.
        ListAdapter adapter = new SimpleCursorAdapter(this, // Context.
                android.R.layout.simple_list_item_multiple_choice, // Specify the row template
                                                        // to use (here, two
                                                        // columns bound to the
                                                        // two retrieved cursor
                                                        // rows).
                mCursor, // Pass in the cursor to bind to.
                // Array of cursor columns to bind to.
                new String[] { ContactsContract.Contacts.DISPLAY_NAME ,
                        ContactsContract.Contacts._ID},
                // Parallel array of which template objects to bind to those
                // columns.
                new int[] { android.R.id.text1, android.R.id.text2 });

        // Bind to our new adapter.
        setListAdapter(adapter);

         final ListView listView = getListView();
            listView.setItemsCanFocus(false);
            listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    }

    private Cursor getContacts() 
    {
        // Run query
        Uri uri = ContactsContract.Contacts.CONTENT_URI;
        String[] projection = new String[] { ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME };
        String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"
                + ("1") + "'";
        String[] selectionArgs = null;
        String sortOrder = ContactsContract.Contacts.DISPLAY_NAME+ " COLLATE LOCALIZED ASC";

        return managedQuery(uri, projection, selection, selectionArgs,sortOrder);
    }

    protected void onListItemClick(ListView l, View v, int position, long id)
    {
    super.onListItemClick(l, v, position, id);
    //here i want to handle the event.and should display the details of that contacts in another screen .
    //Toast.makeText(Toggle3.this,"Item in position " + position + " clicked",Toast.LENGTH_LONG).show();
    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
    if (cur.getCount() > 0) 
    {
        while (cur.moveToNext()) 
        {
        String ids = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
        String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        list.add(new BasicNameValuePair("name",name.toString())); 
        //String number = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.NUMBER));
            if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)  

            {
            //Query phone here.  
            Cursor pCur = cr.query(
                                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                                    null, 
                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                                    new String[]{ids}, null);

                                      while(pCur.moveToNext())
                                      {
                                   String number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                                   list.add(new BasicNameValuePair("num",number.toString())); 
                                      }

                                    pCur.close();
            }//if

    }//while
        Log.i("array items", "" +list);
    }//if
    }//on click
    }//class

While executing this application it's showing all my phonebook contacts in the application with checkboxes in each row. If I click on any name (list item) it stores all the contact details into an array. But I want to store only selected contacts. What should I change in my code.. please do needful help

I have modified your code. Now its working as per expectation. Vote my answer if it is helpful for you so that It will increase your ratings also

use the following code to retrieve contact from mobile.

I have tested. its working fine

public static void getContactNumbers(Context context) {
        String contactNumber = null;
        int contactNumberType = Phone.TYPE_MOBILE;
        String nameOfContact = null;
        if (ApplicationConstants.phoneContacts.size() <= 0) {
            ContentResolver cr = context.getContentResolver();
            Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
                    null, null, null);
            if (cur.getCount() > 0) {
                while (cur.moveToNext()) {
                    String id = cur.getString(cur
                            .getColumnIndex(BaseColumns._ID));
                    nameOfContact = cur
                            .getString(cur
                                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                    if (Integer
                            .parseInt(cur.getString(cur
                                    .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                        Cursor phones = cr
                                .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                        null,
                                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                                + " = ?", new String[] { id },
                                        null);

                        while (phones.moveToNext()) {
                            contactNumber = phones.getString(phones
                                    .getColumnIndex(Phone.NUMBER));
                            contactNumberType = phones.getInt(phones
                                    .getColumnIndex(Phone.TYPE));
                            Log.i(TAG, "...Contact Name ...." + nameOfContact
                                    + "...contact Number..." + contactNumber);

                        }
                        phones.close();
                    }

                }
            }// end of contact name cursor
            cur.close();

        }
    }
        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
        while (phones.moveToNext())
        {
        String Name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)
        String Number=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

        }
 public void readContacts()
{
    int i=0;
    Cursor  cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            null,null,null,null);
    count=cursor.getCount();
    names=new String[count];
    phno=new String[count];
    while(cursor.moveToNext())
    {
       names[i]=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)) ;
       phno[i]=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
       i++;
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM