2010-12-02 5 views

답변

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

내 질문에 대한 완벽한 해결책입니다. 하지만, 여기에 나는 GlobalConfig 클래스의 사용법과 주어진 GroupContainsTitle을 저장하는 방법을 이해하지 못한다. @Abhishek은 GlobalConfig 클래스에 대해 더 자세히 설명 할 수 있습니다. 그것은 내 시간을 절약 할 것이다. – Prativa

+0

@prativa GlobalConfig는 응용 프로그램 전체에서 액세스 할 수있는 정적 컬렉션을 저장하기 위해 여기에 사용되는 단순한 정적 클래스입니다. – Abhi

+0

완벽! 같은 그룹을 더 얻게되는 이유는 무엇입니까? 예. 3 명의 동료와 2 명의 친구. – erdomester

5

@Abhi에 의한 대답은 좋아하지만, 몇 가지 한계가 있습니다이

  • 보이지 않는 그룹에게
  • 나열합니다 '유령'그룹을 나열합니다 (즉 그룹입니다

    • 삭제 목록이 표시됩니다 연락처를하는 삭제 되었어야하지만 여전히 변두리에있다)

    -

    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

    이전 과장 답변이 필요 없습니다. 훨씬 간단한 솔루션입니다.

    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

    Thanks mate! 이것은 더 간단한 것이다. – Darsh

    +0

    "ArrayL"은 어디에서 왔습니까? – retorquere