1

Xmpp クライアントを開発して、バディリストを画像付きで表示しようとしています。迅速な検索とネットワークの使用を不要にするために、キャッシュ ディレクトリに画像を保存しています。ここでの問題は、バディが画像を変更した場合、新しい画像をフェッチするよう通知を受け取る方法です。ローカルキャッシュからではなく、サーバーから。提案してください。

asmack apiを使用しています。

4

1 に答える 1

1
private static XMPPConnection connection;

// If any changes occured in buddylist
connection.getRoster().addRosterListener(new RosterListener() {

            @Override
            public void presenceChanged(Presence arg0) {

            }

            @Override
            public void entriesUpdated(Collection<String> arg0) {

            }

            @Override
            public void entriesDeleted(Collection<String> arg0) {

            }

            @Override
            public void entriesAdded(Collection<String> arg0) {

            }
        });

ユーザーリストを取得する

private ArrayList<HashMap<String, String>> getUserList() throws Exception {

        ArrayList<HashMap<String, String>> userList = new ArrayList<HashMap<String, String>>();
        if (isConnectionAlive() || reConnectAndAuth()) {
            Roster roster = connection.getRoster();
            Collection<RosterEntry> entries = roster.getEntries();
            for (RosterEntry entry : entries) {
                String avatarPath = "";
                VCard vCard = new VCard();
                try {
                    vCard.load(connection, entry.getUser());
                    vCard.getExtensions();
                    byte[] b = vCard.getAvatar();
                    Bitmap avatar = BitmapFactory.decodeByteArray(vCard.getAvatar(), 0, b.length);
                    avatarPath = savaAvatar(avatar, entry.getUser());
                } catch (Exception e) {
                }

                HashMap<String, String> user = new HashMap<String, String>();
                user.put("name", entry.getName());
                user.put("userid", entry.getUser());
                user.put("statusMsg", "" + entry.getStatus());
                user.put("user_avatar", avatarPath);
                user.put("status", "" + connection.getRoster().getPresence(entry.getUser()).isAvailable());
                userList.add(user);
            }
        }
        return userList;
    }
于 2013-09-04T12:06:28.800 に答える