【发布时间】:2013-03-09 05:54:12
【问题描述】:
经过数小时的调试并试图找出使用 aSmack 文件传输无法正常工作的原因,而正常的消息传递却如此,我终于设法将其归结为这一点。
当我按照 Smack 文档中给出的方法获取用户的名册列表时,Openfire 服务器发送的名册 JID 缺少 / 结尾。
Collection<RosterEntry> entries = roster.getEntries();
for (RosterEntry r : entries) {
Log.v("Gabriel","Receiving: " + r.getUser());
}
例如,如果我收到来自用户 gabriel 的消息,我得到的“发件人”为:
gabriel@dragonov/Smack
但是 r.getUser() 会返回给用户
gabriel@dragonov
偶数
connection.getRoster().getPresence(contactName).getFrom()
返回的是“gabriel@dragonov”。
这会导致文件传输失败,但奇怪的是不会导致常规消息传递。但是,当我在末尾手动添加 /Smack 时
OutgoingFileTransfer transferr = manager.createOutgoingFileTransfer(contactJID+"/Smack");
它有效。
我的问题是,如何接收包含资源部分的完整 JID 或配置文件传输以使其在使用裸 JID 时不会失败?
编辑:
我试过以下方法:
Log.v("Gabriel", entries.size() + " buddy(ies):");
for (RosterEntry r : entries) {
Log.v("Pat","adding: " + r.getType() + " " + r.getName());
contacts.add(r.getUser());
}
for (String contact : contacts){
Iterator<org.jivesoftware.smack.packet.Presence> presences = connection.getRoster().getPresences(contact);
Log.v("Gabriel", contact+" has: ");
while(presences.hasNext()){
Log.v("Gabriel",presences.next().getFrom());
}
}
但我仍然得到了裸 ID。
输出: gabriel@dragonov 有: 加布里埃尔@dragonov
【问题讨论】:
标签: xmpp file-transfer smack asmack