【发布时间】:2014-08-22 09:09:18
【问题描述】:
我正在开发一个聊天应用程序,在 FileTransfers 中,我可以成功地将文件发送到 spark 客户端,但是在监听时,我在协商部分收到 NullPointerException 错误,这是 android 客户端从 spark 接收到的 IQ:
RCV (0): <iq id="dnkUY-33" to="reza@reza-hp/Smack" from="admin@reza-hp/Spark 2.6.3"
type="set">
<si xmlns="http://jabber.org/protocol/si" id="jsi_5267323957851897853"
mime-type="image/jpeg" profile="http://jabber.org/protocol/si/profile/file-
transfer">
<file xmlns="http://jabber.org/protocol/si/profile/file-transfer"
name="635px-Food.jpg" size="45135">
<desc>Sending file</desc>
</file><feature
xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="form">
<field var="stream-method" type="list-single">
<option><value>http://jabber.org/protocol/bytestreams</value></option><option>
<value>http://jabber.org/protocol/ibb</value></option></field></x></feature>
</si></iq>
这是打印的错误:
07-01 13:40:49.075: W/System.err(1986): java.lang.NullPointerException
07-01 13:40:49.075: W/System.err(1986):
atorg.jivesoftware.smackx.filetransfer.
IncomingFileTransfer.negotiateStream(IncomingFileTransfer.java:173)
07-01 13:40:49.075: W/System.err(1986): at
org.jivesoftware.smackx.filetransfer.
IncomingFileTransfer.access$100(IncomingFileTransfer.java:45)
07-01 13:40:49.075: W/System.err(1986): at
org.jivesoftware.smackx.filetransfer.
IncomingFileTransfer$1.run(IncomingFileTransfer.java:122)
07-01 13:40:49.085: W/System.err(1986): at java.lang.Thread.run(Thread.java:841)
异常为空,但根据提供的 IQ,似乎传输类型是“流启动”,所以我想可能是 asmack 默认没有发现它,有没有人对此有任何解决方案,或者知道如何发现“流启动”?非常感谢提前
【问题讨论】:
-
OOOkkk,刚刚找到解决方案,我对这个问题的看法是正确的,对不起 aSmack 的弱 IT,只需添加此字段:ServiceDiscoveryManager.getInstanceFor(connection).addFeature("jabber.org/protocol /si" );所以你的 aSmack 支持 StreamInitiation.... 相信这解决了很多 ppl 的问题
-
在某些情况下,您可能需要将其添加到发送方: FileTransferNegotiator.setServiceEnabled(connection, true);或/和: FileTransferNegotiator.IBB_ONLY=true; //注意这会导致只使用 IBB 协议,但由于 asmack k 已知错误,有时无法选择取决于客户端、服务器等
-
"只需添加此字段:ServiceDiscoveryManager.getInstanceFor(connection).addFeature("jabber.org/protocol /si");"这是由 aSmack 自动完成的。还有与文件传输相关的“已知的 aSmack 错误”。你用的是哪个版本?
-
最新版本8-4.0.0,显然不是
-
老兄,openfire 支持离线文件传输吗?