不能读取手机联系人

问题描述:

我正在阅读存储在手机中的联系人并在列表视图中显示他们。 我的代码如下:不能读取手机联系人

String col[]={ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME}; 

    Cursor cursorNames = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, col, null, null, null); 
    intentContactsToreturn=new Intent(); 

    ArrayList<String> contactNames=new ArrayList<String>(); 
    ArrayList<String> contactNumbers=new ArrayList<String>(); 

    try 
    { 
     if(cursorNames.getCount() > 0) 
     { 
      while(cursorNames.moveToNext()) 
      {   
      String id = cursorNames.getString(cursorNames.getColumnIndex(Contacts._ID)); 
      contactNames.add(cursorNames.getString(cursorNames.getColumnIndex(Contacts.DISPLAY_NAME))); 

      Cursor cursorNumbers =getContentResolver().query(CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null); 
      cursorNumbers.moveToFirst(); 
      contactNumbers.add(cursorNumbers.getString(cursorNumbers.getColumnIndex(CommonDataKinds.Phone.NUMBER)));   
      } 
     } 
    } 
    finally 
    { 
     cursorNames.close(); 
    } 

    ContactListArrayAdapter arrayAdapter = new ContactListArrayAdapter(this,contactNames,contactNumbers); 
    // lv.addFooterView(b); 
    listViewContacts.setAdapter(arrayAdapter); 
} 

现在的问题是读取SIM卡联系人(而不是手机中的联系人),也它不读SIM卡中的所有联系人。

它读取SIM中的一些联系人,确切的数字是15(而在SiM中有100多个联系人),并且它在列表视图中重复联系人。

这样

15接触 然后再同15个触点reapeating列表视图。

一次又一次共重复4次15次接触。

+0

尝试在您开始遍历游标之前调用cursor.moveToFirst,也许这将解决问题。 – Egor 2012-03-21 06:02:17

+0

希望您添加了READ_CONTACTS权限。 – 2012-03-21 06:03:17

+0

[此处输入链路描述] [1] [1]:http://*.com/questions/2356084/read-all-contacts-phone-numbers-in-android – Android 2012-03-21 06:21:26

我使用此代码来获取联系人。

public ArrayList<String> c_Name = new ArrayList<String>(); 
    public ArrayList<String> c_Number = new ArrayList<String>(); 
    static String[] name_Val = null; 
    String[] phone_Val = null; 
    String local_value = null; 

ContentResolver cr1 = getContentResolver(); 
     String[] projection = new String[] { People._ID, People.NAME, 
       People.NUMBER }; 
     Uri phone_contacts = People.CONTENT_URI; 
     Cursor managedCursor = cr1.query(phone_contacts, projection, null, 
       null, People.NAME + " ASC"); 
     if (managedCursor.moveToFirst()) { 
      String contactname; 
      String cphoneNumber; 
      int nameColumn = managedCursor.getColumnIndex(People.NAME); 
      int phoneColumn = managedCursor.getColumnIndex(People.NUMBER); 
      Log.d("int Name", Integer.toString(nameColumn)); 
      Log.d("int Number", Integer.toString(phoneColumn)); 
      do { 

       contactname = managedCursor.getString(nameColumn); 
       cphoneNumber = managedCursor.getString(phoneColumn); 
       Log.d("Outside cname", "ts" + contactname); 
       Log.d("Outside cno", "ts" + cphoneNumber); 
       if ((contactname == " " || contactname == null) 
         && (cphoneNumber == " " || cphoneNumber == null)) { 
        // displayAlert1(); 

       } else { 
        c_Name.add(contactname); 
        c_Number.add(cphoneNumber); 
        Log.d("contact Name", c_Name.toString()); 
        Log.d("contact No", c_Number.toString()); 
       } 
      } while (managedCursor.moveToNext()); 

     } 

     Uri contacts = Uri.parse("content://icc/adn"); 

     Cursor managedCursor1 = cr1.query(contacts, null, null, null, null); 

     if (managedCursor1.moveToFirst()) { 

      String contactname; 
      String cphoneNumber; 

      int nameColumn = managedCursor1.getColumnIndex("name"); 
      int phoneColumn = managedCursor1.getColumnIndex("number"); 

      Log.d("int Name", Integer.toString(nameColumn)); 
      Log.d("int Number", Integer.toString(phoneColumn)); 

      do { 
       // Get the field values 
       contactname = managedCursor1.getString(nameColumn); 
       cphoneNumber = managedCursor1.getString(phoneColumn); 
       if ((contactname == " " || contactname == null) 
         && (cphoneNumber == " " || cphoneNumber == null)) { 
        // displayAlert1(); 

       } else { 
        c_Name.add(contactname); 
        c_Number.add(cphoneNumber); 
       } 
      } while (managedCursor1.moveToNext()); 

     } 
     name_Val = (String[]) c_Name.toArray(new String[c_Name.size()]); 
     phone_Val = (String[]) c_Number.toArray(new String[c_Name.size()]); 

然后将name_Val,phone_Val设置为您的列表视图。

   ContactListArrayAdapter arrayAdapter = new ContactListArrayAdapter(this,name_Val,phone_Val); 
    // lv.addFooterView(b); 
    listViewContacts.setAdapter(arrayAdapter);