【发布时间】:2012-07-24 21:38:39
【问题描述】:
我正在开发一个聊天应用程序,我需要在其中支持文件传输。为此,我正在使用 Smack API。但是我的文件没有被传输,我得到了File status Error 和progress 0.0
我已经在网上搜索过,但它们都使用相同的方式发送文件。但我得到了错误。
我知道关于这个问题有几个问题,但没有给出正确的解决方案。
那么有人知道这个吗?如何解决这个问题?
编辑:
我尝试将 127.0.0.1 更改为 10.0.2.2,现在我的状态是 Negotiating 但经过几次尝试后我得到了错误状态。
这是我的文件传输代码:
ServiceDiscoveryManager sdm = ServiceDiscoveryManager
.getInstanceFor(connection);
if (sdm == null)
sdm = new ServiceDiscoveryManager(connection);
sdm.addFeature("http://jabber.org/protocol/disco#info");
sdm.addFeature("http://jabber.org/protocol/disco#item");
sdm.addFeature("jabber:iq:privacy");
Log.i("send file", "send file");
FileTransferManager manager = new FileTransferManager(
connection);
FileTransferNegotiator.setServiceEnabled(
connection, true);
OutgoingFileTransfer transfer = manager
.createOutgoingFileTransfer("919974740823@127.0.0.1/Smack");
Log.i("transfer file",
"outgoingfiletransfer is created");
try {
OutgoingFileTransfer.setResponseTimeout(30000);
transfer.sendFile(
new File(path_file+"/"+"andr.jpeg"),
"Description");
Log.i("transfer file", "sending file");
Log.i("transfer file","the path is :"+path_file+"/"+"andr.jpeg");
while (!transfer.isDone()) {
try {
Thread.sleep(1000);
Log.i("transfer file",
"sending file status :- "
+ transfer.getStatus()
+ " "
+ "progress:-"
+ transfer
.getProgress());
if (transfer.getStatus() == org.jivesoftware.smackx.filetransfer.FileTransfer.Status.error) {
transfer.cancel();
Log.e("", "ERROR");
break;
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
Log.e("catch", "catch" + e);
e.printStackTrace();
}
}
} catch (XMPPException e) {
// TODO Auto-generated catch block
Log.e("catch", "catch" + e);
e.printStackTrace();
}
Log.i("transfer file", "--------");
}
任何帮助和建议将不胜感激。
谢谢
【问题讨论】:
-
运气好吗?我也有同样的问题...
-
不,仍在寻找解决方案,如果您有任何解决方案,请告诉我谢谢
-
我正在尝试接收文件并遇到类似问题。知道该怎么做吗?
-
@juned 您找到解决方案了吗?如果你可以通过 asmack 发送文件,你能告诉我怎么做吗?非常感谢!!
-
是的,我会告诉你它是否有效
标签: android file-transfer smack