【问题标题】:aSmack File Transfer Returning NPEaSmack 文件传输返回 NPE
【发布时间】: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 支持离线文件传输吗?

标签: android xmpp asmack


【解决方案1】:

OOOkkk,刚刚找到解决方案,我对这个问题的看法是正确的,对不起aSmack的弱IT,只需添加此字段:

 ServiceDiscoveryManager.getInstanceFor(connection).addFeature("jabber.org/protocol  
 /si"); 

所以你的 aSmack 支持 StreamInitiation.... 我确信这解决了很多 ppl 的问题

还在连接后添加文件传输提供程序,这会有所不同。我的意思是当你确定它们在连接已经连接时被读取,比如“尝试”

最重要的部分:肯定使用 Asmack 8-4.0.0 rc-1,最适合文件传输任何问题很乐意提供帮助,经过 1 周的尝试,我想我学到了很多。谢谢

【讨论】:

  • 我强烈建议不要在发布可用 (4.0.0) 时使用 aSmack 的候选发布 (4.0.0-rc1)。没有理由使用 -rc1。
  • 哥们有没有找到asmack文件传输的绝对解决方案?
  • 我对 aSmack 文件传输没有任何问题,它对我有用,因此我不是在寻找解决方案。
  • 你能帮帮我吗,据我所知代码没有问题,你用模拟器和openfire服务器测试过吗?
  • 因为使用相同的代码,我的代码偶尔可以工作,然后重启应用后就不行了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多