Android基于XMPP Smack Openfire下学习开发IM(二)对分组、好友和头像等一些

下面就一起来学习一下,如何查询分组和添加分组等!

一、查询所有分组
通过Roster来获取所有分组,Roster可以通过connection.getRoster()来得到。

[java] view plaincopyprint?
/**

 * 获取所有组 
 *  
 * @param roster 
 * @return 所有组集合 
 */  
public static List<RosterGroup> getGroups(Roster roster) {  
    List<RosterGroup> grouplist = new ArrayList<RosterGroup>();  
    Collection<RosterGroup> rosterGroup = roster.getGroups();  
    Iterator<RosterGroup> i = rosterGroup.iterator();  
    while (i.hasNext()) {  
        grouplist.add(i.next());  
    }  
    return grouplist;  
}  

/**
 * 获取所有组
 * 
 * @param roster
 * @return 所有组集合
 */
public static List<RosterGroup> getGroups(Roster roster) {
    List<RosterGroup> grouplist = new ArrayList<RosterGroup>();
    Collection<RosterGroup> rosterGroup = roster.getGroups();
    Iterator<RosterGroup> i = rosterGroup.iterator();
    while (i.hasNext()) {
        grouplist.add(i.next());
    }
    return grouplist;
}

二、添加分组

也一样通过roster来添加分组,groupName 为分组名。

[java] view plaincopyprint?
/**

 * 添加一个分组 
 *  
 * @param roster 
 * @param groupName 
 * @return 
 */  
public static boolean addGroup(Roster roster, String groupName) {  
    try {  
        roster.createGroup(groupName);  
        return true;  
    } catch (Exception e) {  
        e.printStackTrace();  
        return false;  
    }  
}  

/**
 * 添加一个分组
 * 
 * @param roster
 * @param groupName
 * @return
 */
public static boolean addGroup(Roster roster, String groupName) {
    try {
        roster.createGroup(groupName);
        return true;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

三、查询某个组里面的所有好友
很简单不解释…

[java] view plaincopyprint?
/**

 * 获取某个组里面的所有好友 
 *  
 * @param roster 
 * @param groupName 
 *            组名 
 * @return 
 */  
public static List<RosterEntry> getEntriesByGroup(Roster roster,  
        String groupName) {  
    List<RosterEntry> Entrieslist = new ArrayList<RosterEntry>();  
    RosterGroup rosterGroup = roster.getGroup(groupName);  
    Collection<RosterEntry> rosterEntry = rosterGroup.getEntries();  
    Iterator<RosterEntry> i = rosterEntry.iterator();  
    while (i.hasNext()) {  
        Entrieslist.add(i.next());  
    }  
    return Entrieslist;  
}  

/**
 * 获取某个组里面的所有好友
 * 
 * @param roster
 * @param groupName
 *            组名
 * @return
 */
public static List<RosterEntry> getEntriesByGroup(Roster roster,
        String groupName) {
    List<RosterEntry> Entrieslist = new ArrayList<RosterEntry>();
    RosterGroup rosterGroup = roster.getGroup(groupName);
    Collection<RosterEntry> rosterEntry = rosterGroup.getEntries();
    Iterator<RosterEntry> i = rosterEntry.iterator();
    while (i.hasNext()) {
        Entrieslist.add(i.next());
    }
    return Entrieslist;
}

四、查询所有好友信息

很简单

[java] view plaincopyprint?
/**

 * 获取所有好友信息 
 *  
 * @param roster 
 * @return 
 */  
public static List<RosterEntry> getAllEntries(Roster roster) {  
    List<RosterEntry> Entrieslist = new ArrayList<RosterEntry>();  
    Collection<RosterEntry> rosterEntry = roster.getEntries();  
    Iterator<RosterEntry> i = rosterEntry.iterator();  
    while (i.hasNext()) {  
        Entrieslist.add(i.next());  
    }  
    return Entrieslist;  
}  

/**
 * 获取所有好友信息
 * 
 * @param roster
 * @return
 */
public static List<RosterEntry> getAllEntries(Roster roster) {
    List<RosterEntry> Entrieslist = new ArrayList<RosterEntry>();
    Collection<RosterEntry> rosterEntry = roster.getEntries();
    Iterator<RosterEntry> i = rosterEntry.iterator();
    while (i.hasNext()) {
        Entrieslist.add(i.next());
    }
    return Entrieslist;
}

五、获取用户VCard信息

[java] view plaincopyprint?
/**

 * 获取用户VCard信息 
 *  
 * @param connection 
 * @param user 
 * @return 
 * @throws XMPPException 
 */  
public static VCard getUserVCard(XMPPConnection connection, String user)  
        throws XMPPException {  
    VCard vcard = new VCard();  
    vcard.load(connection, user);  
    return vcard;  
}  

/**
 * 获取用户VCard信息
 * 
 * @param connection
 * @param user
 * @return
 * @throws XMPPException
 */
public static VCard getUserVCard(XMPPConnection connection, String user)
        throws XMPPException {
    VCard vcard = new VCard();
    vcard.load(connection, user);
    return vcard;
}

六、获取用户头像信息

通过Vcard来获取用户头像信息,可以把 InputStream 转换为自己想要的类型,InputStream 转Drawable

这篇文章里可以找到 http://blog.csdn.net/h7870181/article/details/8663760

[java] view plaincopyprint?
/**

 * 获取用户头像信息 
 *  
 * @param connection 
 * @param user 
 * @return 
 */  
public static Drawable getUserImage(XMPPConnection connection, String user) {  
    ByteArrayInputStream bais = null;  
    try {  
        VCard vcard = new VCard();  
        // 加入这句代码,解决No VCard for   
        ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp",  
                new org.jivesoftware.smackx.provider.VCardProvider());  

        vcard.load(connection, user+"@"+connection.getServiceName());  

        if (vcard == null || vcard.getAvatar() == null)  
            return null;  
        bais = new ByteArrayInputStream(vcard.getAvatar());  

    } catch (Exception e) {  
        e.printStackTrace();  
    }  
    if (bais == null)  
        return null;  
    return FormatTools.getInstance().InputStream2Drawable(bais);  
}  

/**
 * 获取用户头像信息
 * 
 * @param connection
 * @param user
 * @return
 */
public static Drawable getUserImage(XMPPConnection connection, String user) {
    ByteArrayInputStream bais = null;
    try {
        VCard vcard = new VCard();
        // 加入这句代码,解决No VCard for
        ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp",
                new org.jivesoftware.smackx.provider.VCardProvider());

        vcard.load(connection, user+"@"+connection.getServiceName());

        if (vcard == null || vcard.getAvatar() == null)
            return null;
        bais = new ByteArrayInputStream(vcard.getAvatar());

    } catch (Exception e) {
        e.printStackTrace();
    }
    if (bais == null)
        return null;
    return FormatTools.getInstance().InputStream2Drawable(bais);
}

七、添加好友(有、无分组)

[java] view plaincopyprint?
/**

 * 添加好友 无分组 
 *  
 * @param roster 
 * @param userName 
 * @param name 
 * @return 
 */  
public static boolean addUser(Roster roster, String userName, String name) {  
    try {  
        roster.createEntry(userName, name, null);  
        return true;  
    } catch (Exception e) {  
        e.printStackTrace();  
        return false;  
    }  
}  

/** 
 * 添加好友 有分组 
 *  
 * @param roster 
 * @param userName 
 * @param name 
 * @param groupName 
 * @return 
 */  
public static boolean addUser(Roster roster, String userName, String name,  
        String groupName) {  
    try {  
        roster.createEntry(userName, name, new String[] { groupName });  
        return true;  
    } catch (Exception e) {  
        e.printStackTrace();  
        return false;  
    }  
}  

/**
 * 添加好友 无分组
 * 
 * @param roster
 * @param userName
 * @param name
 * @return
 */
public static boolean addUser(Roster roster, String userName, String name) {
    try {
        roster.createEntry(userName, name, null);
        return true;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

/**
 * 添加好友 有分组
 * 
 * @param roster
 * @param userName
 * @param name
 * @param groupName
 * @return
 */
public static boolean addUser(Roster roster, String userName, String name,
        String groupName) {
    try {
        roster.createEntry(userName, name, new String[] { groupName });
        return true;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

八、删除好友

[java] view plaincopyprint?
/**

 * 删除好友 
 *  
 * @param roster 
 * @param userName 
 * @return 
 */  
public static boolean removeUser(Roster roster, String userName) {  
    try {  
        if (userName.contains("@")) {  
            userName = userName.split("@")[0];  
        }  

        RosterEntry entry = roster.getEntry(userName);  
        System.out.println("删除好友:" + userName);  
        System.out.println("User." + roster.getEntry(userName) == null);  
        roster.removeEntry(entry);  

        return true;  
    } catch (Exception e) {  
        e.printStackTrace();  
        return false;  
    }  
}  

/**
 * 删除好友
 * 
 * @param roster
 * @param userName
 * @return
 */
public static boolean removeUser(Roster roster, String userName) {
    try {
        if (userName.contains("@")) {
            userName = userName.split("@")[0];
        }

        RosterEntry entry = roster.getEntry(userName);
        System.out.println("删除好友:" + userName);
        System.out.println("User." + roster.getEntry(userName) == null);
        roster.removeEntry(entry);

        return true;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

九、查询用户

serverDoMain 为服务器域名

[java] view plaincopyprint?
/**

 * 查询用户 
 *  
 * @param connection 
 * @param serverDomain 
 * @param userName 
 * @return 
 * @throws XMPPException 
 */  
public static List<User> searchUsers(XMPPConnection connection,  
        String serverDomain, String userName) throws XMPPException {  
    List<User> results = new ArrayList<User>();  
    System.out.println("查询开始..............." + connection.getHost()  
            + connection.getServiceName());  

    UserSearchManager usm = new UserSearchManager(connection);  

    Form searchForm = usm.getSearchForm(serverDomain);  
    Form answerForm = searchForm.createAnswerForm();  
    answerForm.setAnswer("userAccount", true);  
    answerForm.setAnswer("userPhote", userName);  
    ReportedData data = usm.getSearchResults(answerForm, serverDomain);  

    Iterator<Row> it = data.getRows();  
    Row row = null;  
    User user = null;  
    while (it.hasNext()) {  
        user = new User();  
        row = it.next();  
        user.setUserAccount(row.getValues("userAccount").next().toString());  
        user.setUserPhote(row.getValues("userPhote").next().toString());  

        System.out.println(row.getValues("userAccount").next());  
        System.out.println(row.getValues("userPhote").next());  
        results.add(user);  
        // 若存在,则有返回,UserName一定非空,其他两个若是有设,一定非空   
    }  
    return results;  
}  

/**
 * 查询用户
 * 
 * @param connection
 * @param serverDomain
 * @param userName
 * @return
 * @throws XMPPException
 */
public static List<User> searchUsers(XMPPConnection connection,
        String serverDomain, String userName) throws XMPPException {
    List<User> results = new ArrayList<User>();
    System.out.println("查询开始..............." + connection.getHost()
            + connection.getServiceName());

    UserSearchManager usm = new UserSearchManager(connection);

    Form searchForm = usm.getSearchForm(serverDomain);
    Form answerForm = searchForm.createAnswerForm();
    answerForm.setAnswer("userAccount", true);
    answerForm.setAnswer("userPhote", userName);
    ReportedData data = usm.getSearchResults(answerForm, serverDomain);

    Iterator<Row> it = data.getRows();
    Row row = null;
    User user = null;
    while (it.hasNext()) {
        user = new User();
        row = it.next();
        user.setUserAccount(row.getValues("userAccount").next().toString());
        user.setUserPhote(row.getValues("userPhote").next().toString());

        System.out.println(row.getValues("userAccount").next());
        System.out.println(row.getValues("userPhote").next());
        results.add(user);
        // 若存在,则有返回,UserName一定非空,其他两个若是有设,一定非空
    }
    return results;
}

十、修改用户头像

[java] view plaincopyprint?
/**

 * 修改用户头像 
 *  
 * @param connection 
 * @param f 
 * @throws XMPPException 
 * @throws IOException 
 */  
public static void changeImage(XMPPConnection connection, File f)  
        throws XMPPException, IOException {  

    VCard vcard = new VCard();  
    vcard.load(connection);  

    byte[] bytes;  

    bytes = getFileBytes(f);  
    String encodedImage = StringUtils.encodeBase64(bytes);  
    vcard.setAvatar(bytes, encodedImage);  
    vcard.setEncodedImage(encodedImage);  
    vcard.setField("PHOTO", "<TYPE>image/jpg</TYPE><BINVAL>" + encodedImage  
            + "</BINVAL>", true);  

    ByteArrayInputStream bais = new ByteArrayInputStream(vcard.getAvatar());  
    FormatTools.getInstance().InputStream2Bitmap(bais);  

    vcard.save(connection);  
}  

你可能感兴趣的:(openfire)