2012-01-29 36 views
2

我有一个关于android联系人的问题。我想查询所有未分配给任何组的联系人,但我不确定搜索条件,我的意思是,有时GroupMembership.GROUP_ROW_ID为空如果联系人没有组,但有时GroupMembership.GROUP_ROW_ID为-1 。任何人都可以告诉我如何搜索所有联系人没有组?如何搜索联系人没有组

回答

0

这是一个粗略的,但它适用于我。如果不进行两次查询,我看不到一个简单的方法找到没有组的联系人。

很可能您可以优化查询以删除重复项,从而消除对“foundIds”集的需求。

private Cursor getNoGroupsCursor() { 

    Set<String> groupIds = new HashSet<String>(); 
    Set<String> foundIds = new HashSet<String>(); 

    // Get the group membership 
    Cursor gmCursor = getContentResolver().query(
      Data.CONTENT_URI, 
      new String[] { Data.CONTACT_ID, Data.MIMETYPE, Data.DATA1 }, 
      Data.MIMETYPE + " = '" + GroupMembership.CONTENT_ITEM_TYPE 
      + "'", null, null); 

    while (gmCursor.moveToNext()) { 
     String groupTitle = gmCursor.getString(2); 
     // We need to pre-parse the group ids to find all the ones that 
     // have a group 
     if (groupTitle != null && !"-1".equals(groupTitle)) { 
      groupIds.add(gmCursor.getString(0)); 
     } 
    } 

    gmCursor.close(); 

    // Get the contacts 
    gmCursor = getContentResolver().query(Data.CONTENT_URI, 
      new String[] { Data.CONTACT_ID, Data.DISPLAY_NAME }, null, 
      null, "2 ASC"); 

    // We want a projected matrix cursor that contains the contact ID and 
    // group name, rather than the group ID 
    MatrixCursor mc = new MatrixCursor(PROJECTION_GROUPS); 

    while (gmCursor.moveToNext()) { 

     String id = gmCursor.getString(0); 

     if (!foundIds.contains(id) && !groupIds.contains(id)) { 
      mc.addRow(new Object[] { gmCursor.getString(0), 
        gmCursor.getString(1), null, null }); 
      foundIds.add(id); 
     } 
    } 

    gmCursor.close(); 

    return mc; 
} 
+0

是的,我知道身份证很长,而不是字符串。咩。 – 2012-01-29 17:39:02

+0

感谢您的回复,现在我只能用两步搜索来解决这个问题,也许我们可以找到更好的方法,比如搜索view_data视图。 – user1145055 2012-02-03 05:18:20

相关问题