2010-12-02 4 views

Antwort

9
final String[] GROUP_PROJECTION = new String[] { 
      ContactsContract.Groups._ID, ContactsContract.Groups.TITLE }; 
    cursor = getContentResolver().query(
    ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION, null, 
      null, ContactsContract.Groups.TITLE); 

      GlobalConfig.groupList.clear(); 
    Group g = new Group(); 
    g.GroupIdList += "0"; 
    g.setGroupTitle("ALL"); 
    GlobalConfig.groupList.add(g); 
    while (cursor.moveToNext()) { 

     String id = cursor.getString(cursor 
       .getColumnIndex(ContactsContract.Groups._ID)); 

     String gTitle = (cursor.getString(cursor 
       .getColumnIndex(ContactsContract.Groups.TITLE))); 

     if (gTitle.contains("Group:")) { 
      gTitle = gTitle.substring(gTitle.indexOf("Group:") + 6).trim(); 

     } 
     if (gTitle.contains("Favorite_")) { 
      gTitle = "Favorites"; 
     } 
     if (gTitle.contains("Starred in Android") 
       || gTitle.contains("My Contacts")) { 
      continue; 
     } 

     Group gObj = new Group(); 

     int pos = GlobalConfig.GroupContainsTitle(gTitle); 
     if (pos != -1) { 
      gObj = GlobalConfig.groupList.get(pos); 
      gObj.GroupIdList += "," + id; 
      GlobalConfig.groupList.set(pos, gObj); 

     } else { 
      gObj.GroupIdList += id; 
      gObj.setGroupTitle(gTitle); 
      GlobalConfig.groupList.add(gObj); 

     } 

     // Log.d("GrpId Title", gObj.getGroupIdList() + 
     // gObj.getGroupTitle()); 
    } 
+0

Es ist eine perfekte Lösung für meine Frage. Aber hier nicht, dass ich die Verwendung von GlobalConfig Klasse verstehen und wie sie die gegebene GroupContainsTitle speichern. So @Abhishek u kann mehr über GlobalConfig Klasse klären. Es wird mir Zeit sparen. – Prativa

+0

@prativa GlobalConfig ist nur eine einfache statische Klasse, die hier verwendet wird, um statische Sammlungen zu speichern, auf die in der gesamten Anwendung zugegriffen werden kann. – Abhi

+0

Perfect! Warum bekomme ich mehr von den gleichen Gruppen? Ich bekomme z.B. 3 Mitarbeiter und 2 Freunde. – erdomester

5

Die Antwort von @Abhi ist ok, aber hat einige Grenzen:

  • wird Liste Kontakte gelöscht
  • wird
  • unsichtbare Gruppen auflisten
  • wird ‚Geist‘ Liste Gruppen (dh Gruppen ist die wurden gestrichen, aber immer noch in der Schwebe)

-

private class GroupInfo { 
    String id; 
    String title; 

    @Override 
    public String toString() { 
     return title+ " ("+id+")"; 
    } 

    public String getId() { 
     return id; 
    } 
} 

List<GroupInfo> groups = new ArrayList<GroupInfo>(); 

public void loadGroups() { 
    final String[] GROUP_PROJECTION = new String[] { 
      ContactsContract.Groups._ID, 
      ContactsContract.Groups.TITLE, 
      ContactsContract.Groups.SUMMARY_WITH_PHONES 
      }; 

    Cursor c = getContentResolver().query(
      ContactsContract.Groups.CONTENT_SUMMARY_URI, 
      GROUP_PROJECTION, 
      ContactsContract.Groups.DELETED+"!='1' AND "+ 
      ContactsContract.Groups.GROUP_VISIBLE+"!='0' " 
      , 
      null, 
      null); 
    final int IDX_ID = c.getColumnIndex(ContactsContract.Groups._ID); 
    final int IDX_TITLE = c.getColumnIndex(ContactsContract.Groups.TITLE); 

    Map<String,GroupInfo> m = new HashMap<String, GroupInfo>(); 

    while (c.moveToNext()) { 
     GroupInfo g = new GroupInfo(); 
     g.id = c.getString(IDX_ID); 
     g.title = c.getString(IDX_TITLE); 
     int users = c.getInt(c.getColumnIndex(ContactsContract.Groups.SUMMARY_WITH_PHONES)); 
     if (users>0) { 
      // group with duplicate name? 
      GroupInfo g2 = m.get(g.title); 
      if (g2==null) { 
       m.put(g.title, g); 
       groups.add(g); 
      } else { 
       g2.id+=","+g.id; 
      } 
     } 
    } 
    c.close(); 
    } 
1

Keine Notwendigkeit für alte übertriebene Antworten. Viel einfachere Lösung hier.

final String[] GROUP_PROJECTION = new String[] { 
      ContactsContract.Groups._ID, ContactsContract.Groups.TITLE }; 
Cursor gC = getContentResolver().query(
      ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION,null,null,null); 
gC.moveToFirst(); 
while (!gC.isAfterLast()) { 
     int idcolumn = gC.getColumnIndex(ContactsContract.Groups.TITLE); 
     String Id = gC.getString(idcolumn); 
     ArrayL.add(Id); 
     gC.moveToNext(); 
} 
     LinkedHashSet<String> s = new LinkedHashSet<String>(); 
     s.addAll(ArrayL); 
     ArrayL.clear(); 
     ArrayL.addAll(s); 
+0

Dank mate! Das ist einfacher. – Darsh

+0

Wo „ArrayL“ kommen? – retorquere