您的位置:首页 > 移动开发 > Android开发

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

2015-02-04 14:32 441 查看
下面就一起来学习一下,如何查询分组和添加分组等!


一、查询所有分组

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

[java] view
plaincopyprint?

<span style="white-space:pre">  </span>/** 

     * 获取所有组 

     *  

     * @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?

<span style="white-space:pre">  </span>/** 

     * 添加一个分组 

     *  

     * @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?

<span style="white-space:pre">  </span>/** 

     * 获取某个组里面的所有好友 

     *  

     * @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?

<span style="white-space:pre">  </span>/** 

     * 获取所有好友信息 

     *  

     * @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?

<span style="white-space:pre">  </span>/** 

     * 获取用户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?

<span style="white-space:pre">  </span>/** 

     * 获取用户头像信息 

     *  

     * @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?

<span style="white-space:pre">  </span>/** 

     * 添加好友 无分组 

     *  

     * @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?

<span style="white-space:pre">  </span>/** 

     * 删除好友 

     *  

     * @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?

<span style="white-space:pre">  </span>/** 

     * 查询用户 

     *  

     * @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?

<span style="white-space:pre">  </span>/** 

     * 修改用户头像 

     *  

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

    }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐