2012-03-21 89 views
1

我正在閱讀存儲在手機中的聯繫人並在列表視圖中顯示他們。 我的代碼如下:不能讀取手機聯繫人

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://stackoverflow.com/questions/2356084/read-all-contacts-phone-numbers-in-android – Android 2012-03-21 06:21:26

回答

1

我使用此代碼來獲取聯繫人。

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