【发布时间】:2014-07-02 05:35:11
【问题描述】:
我正在使用 asmack-jse-buddycloud-2010 库制作一个聊天应用程序。通过使用它,我能够进行聊天和文件传输,但在测试 1 个场景时,传输文件(假设文件大小 > 1MB 或任意大小)在这种情况下,要么服务器出现故障,要么我们失去了互联网连接,应用程序通过抛出异常而崩溃
错误日志:
07-02 13:09:05.983: E/AndroidRuntime(12913): FATAL EXCEPTION: File Transfer jsi_555743874184501198
07-02 13:09:05.983: E/AndroidRuntime(12913): Process: com.example.chat_demo, PID: 12913
07-02 13:09:05.983: E/AndroidRuntime(12913): java.lang.IllegalStateException: Not connected to server.
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:488)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.packet.SyncPacketSend.getReply(SyncPacketSend.java:41)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.packet.SyncPacketSend.getReply(SyncPacketSend.java:61)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamSession$IQIBBOutputStream.writeToXML(InBandBytestreamSession.java:763)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamSession$IBBOutputStream.flushBuffer(InBandBytestreamSession.java:707)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamSession$IBBOutputStream.closeInternal(InBandBytestreamSession.java:737)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamSession.closeByLocal(InBandBytestreamSession.java:191)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamSession.close(InBandBytestreamSession.java:153)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamSession$IQIBBOutputStream.writeToXML(InBandBytestreamSession.java:768)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamSession$IBBOutputStream.flushBuffer(InBandBytestreamSession.java:707)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamSession$IBBOutputStream.writeOut(InBandBytestreamSession.java:679)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamSession$IBBOutputStream.write(InBandBytestreamSession.java:641)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamSession$IBBOutputStream.write(InBandBytestreamSession.java:644)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.filetransfer.FileTransfer.writeToStream(FileTransfer.java:217)
07-02 13:09:05.983: E/AndroidRuntime(12913): at org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer$2.run(OutgoingFileTransfer.java:231)
07-02 13:09:05.983: E/AndroidRuntime(12913): at java.lang.Thread.run(Thread.java:811)
我试图捕捉这个异常,但应用程序仍然崩溃并出现相同的异常 任何帮助将不胜感激。
这是我的代码
File file ;
configureProviderManager(connection);
FileTransferNegotiator.setServiceEnabled(connection, true);
FileTransferManager manager = new FileTransferManager(connection);
String to = connection.getRoster().getPresence(to).getFrom();
transfer = manager.createOutgoingFileTransfer(to);
try {
configureProviderManager(connection);
//here file trasfer occur's .parameters are file and filename(has nothing to do with transfer)
transfer.sendFile(file,file.getName().tostring());
} catch (IllegalStateException e) {
Log.i("illegal state exception","caught ");
//transfer.cancel();
}catch (XMPPException e) {
e.printStackTrace();
}
while(!transfer.isDone()) {
if (transfer.getStatus() == Status.error) {
transfer.cancel();
}
if(transfer.getStatus().equals(Status.refused))
System.out.println("refused " + transfer.getError());
else if( transfer.getStatus().equals(Status.error))
System.out.println(" error " + transfer.getError());
}
if(transfer.getStatus().equals(Status.cancelled)){
System.out.println(" cancelled " + transfer.getError());
}
else
System.out.println("Success");
}
}
}
【问题讨论】:
-
您能提供完整的堆栈跟踪吗?还有发生异常的代码行。
-
@Sanjeev 请立即查看帖子..我编辑了“错误日志”...由于传输线时连接关闭而发生异常:“transfer.sendFile(file,”"+file.getName() );"
-
变量
transfer持有什么? -
是“OutgoingFileTransfer transfer;”的对象
-
能否提供完整代码?
标签: java android chat smack illegalstateexception