2011-05-24 50 views
2

我將所有電話簿聯繫人詳細信息作爲數組獲取。對於我寫了下面的代碼:在android中獲取所有電話簿聯繫人詳細信息到數組中

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 

在執行這個應用程序它顯示在各行中的複選框的應用程序中所有我的電話簿聯繫人。如果我點擊任何名稱(列表項),它會將所有聯繫人詳細信息存儲到數組中。但我只想存儲選定的聯繫人。我應該在我的代碼改變..請做要緊的幫助

回答

7

我已經修改了你的代碼。現在它按預期工作。投票我的回答如果是對你有幫助,這樣它會增加你的收視率也

使用下面的代碼從移動檢索聯繫人。

我測試過了。它的做工精細

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

     } 
    } 
+0

海迪帕克,我執行的代碼。我得到了cursorIndexOufOfBounds exception.what應該怎麼做現在 – usha 2011-05-24 08:23:41

+0

海迪帕克,我執行的代碼。每當我點擊特定conact它顯示了cursorIndexOufOfBounds例外。我現在該怎麼做 – usha 2011-05-24 08:30:55

+0

您是否點擊我發送的代碼?你的android手機上有任何聯繫人嗎? – 2011-05-24 08:59:01

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

     } 
+0

真棒,謝謝! – 2014-09-17 18:01:19

+0

你搖滾!謝啦! – 2015-05-07 19:29:49

相關問題