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