- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
经过数小时的调试并试图找出为什么使用 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
最佳答案
使用 Iterator<Presence> Roster.getPresences(String user)
从用户的所有已知资源中获取存在信息。对于此 Presence 实例 getFrom()
应该返回一个完整的 JID,您可以在 FileTransferManager.createOutgoingFileTransfer()
中使用它.
我创建了 SMACK-430 ,关于在 createOutgoingFileTranfer()
中使用完整的 JID .它确实应该抛出一个异常,这样 smack 用户就不必调试几个小时来找到原因(尽管它在方法 javadoc 中有说明)。 SMACK-430 还解释了为什么 FileTransferManager 需要完整的 JID 而不能与裸 JID 一起使用。
关于xmpp - Smack 的 FileTransferManager.createOutgoingFileTransfer 只接受完整的 JID。我如何确定 Smack 中用户的完整 JID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15518440/
我正在使用 smack 4.3.4 开发一个独立的 Java 测试应用程序。我使用带内进行文件传输: FileTransferManager fileTransferManager = FileTra
经过数小时的调试并试图找出为什么使用 aSmack 无法进行文件传输,而正常的消息传递却可以,我终于设法将其归结为这一点。 当我按照 Smack 文档中给出的方法获取用户的名册列表时,Openfire
我是一名优秀的程序员,十分优秀!