【问题标题】:File is not being transferred in smack API文件未在 smack API 中传输
【发布时间】:2012-07-24 21:38:39
【问题描述】:

我正在开发一个聊天应用程序,我需要在其中支持文件传输。为此,我正在使用 Smack API。但是我的文件没有被传输,我得到了File status Errorprogress 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


【解决方案1】:

我也有同样的问题,但是添加了这一行之后

SmackConfiguration.setDefaultPacketReplyTimeout(15000);

它工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 2011-08-28
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多