經過幾個小時的調試,並試圖找出爲什麼文件傳輸不起作用使用aSmack,而正常的消息傳遞時,我終於設法把它放在這。Smack的FileTransferManager.createOutgoingFileTransfer只接受完整的JID。我如何確定Smack中用戶的完整JID?
當我按照Smack文檔中給出的方法獲取用戶的名單時,Openfire服務器發送的Rosters'JID缺少/最後。
Collection<RosterEntry> entries = roster.getEntries();
for (RosterEntry r : entries) {
Log.v("Gabriel","Receiving: " + r.getUser());
}
例如,如果我從用戶加布裏埃爾收到一條消息,我得到了「從」爲:
[email protected]/Smack
但r.getUser()返回給用戶
[email protected]
即使
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。
輸出: 加布裏埃爾@ dragonov有: 加布裏埃爾@ dragonov
我的不好。我以爲我在某處說過我使用asmack,但似乎我沒有。 Roster.getPresences不是一個可用的方法,它看起來像:( – Gabriel 2013-03-20 10:51:46
啊,沒關係,我發現它在connection.getRoster()。我已經嘗試了你說的,但我仍然得到裸露的JID。請檢查我的問題上面,我編輯它 – Gabriel 2013-03-20 10:54:10
你應該更新你的aSmack版本,如果你使用的是舊版本。aSmack肯定有'Roster.getPresences()'。 – Flow 2013-03-20 12:56:45