android - 使用 xmpp 传输文件时出现错误代码 503

标签 android xmpp asmack

我正在尝试使用 smack 和 openfire xmpp 发送图像文件。为此,我正在使用 FileTransferManager 类。要使用 FileTransferManager 类,我使用 asmack-android-6.jar。我跟着这个link做文件共享。这个问题也在本教程下面的评论中分享,但没有给出很好的解决方案。然后我搜索了堆栈溢出,很多开发人员都问过这个问题,但只有 1-2 人得到了他们接受的回复,others不是。

我研究了所有找到的答案,尝试了谷歌给我的所有方法,但仍然无法解决这个问题。

我使用的代码是:

d.findViewById(R.id.btnsendphoto).setOnClickListener(
                    new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                            if (!filepath.equals("")) {
                                ServiceDiscoveryManager sdm = ServiceDiscoveryManager
                                        .getInstanceFor(connection);

                                if (sdm == null) {
                                    sdm = new ServiceDiscoveryManager(
                                            connection);
                                    Log.e("service discovery", "SDM");
                                    sdm.addFeature("http://jabber.org/protocol/disco#info");

                                    sdm.addFeature("jabber:iq:privacy");
                                }

                                mFileTransferManager = new FileTransferManager(
                                        connection);
                                /*
                                 * OutgoingFileTransfer transfer =
                                 * mFileTransferManager
                                 * .createOutgoingFileTransfer
                                 * ("98c6d889473a6fae@pc/Smack");
                                 */
                                String to = connection.getRoster()
                                        .getPresence("98c6d889473a6fae@pc")
                                        .getFrom();
                                OutgoingFileTransfer transfer = mFileTransferManager
                                        .createOutgoingFileTransfer(to);
                                File file = new File(filepath);

                                try {
//[configureProviderManager](http://paste.ubuntu.com/9932239/)
                                    configureProviderManager(connection);
                                    transfer.sendFile(file, "test_file");
                                } catch (XMPPException e) {
                                    e.printStackTrace();
                                }
                                while(!transfer.isDone()) {
                                    Log.d("status", transfer.getStatus().toString());
                                    Log.d("percent", new Long(transfer.getBytesSent()).toString());
                                    if (transfer.getStatus() == Status.error) {
                                        Log.e("percent", "Error " + new Long(transfer.getBytesSent()).toString() + " " + transfer.getError() + " " + transfer.getException());
                                        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());
                                    else if(transfer.getStatus().equals(Status.cancelled))
                                       System.out.println(" cancelled  " + transfer.getError());
                                    else
                                       System.out.println("Success");



                                }

                            }
                            d.dismiss();
                        }
                    });

logcat我得到的很大,所以我给了它的链接。所以任何人都可以告诉我犯了什么错误或者可以建议我为完成任务所做的修改

最佳答案

使用这个 link 解决了这个问题回答不知道为什么它被否决了。让我也在这里分享答案

d.findViewById(R.id.btnsendphoto).setOnClickListener(
                    new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                            if (!filepath.equals("")) {
                                ServiceDiscoveryManager sdm = ServiceDiscoveryManager
                                        .getInstanceFor(connection);

                                if (sdm == null) {
                                    sdm = new ServiceDiscoveryManager(
                                            connection);
                                    Log.e("service discovery", "SDM");
                                    sdm.addFeature("http://jabber.org/protocol/disco#info");

                                    sdm.addFeature("jabber:iq:privacy");
                                }
                                configureProviderManager(connection);
                                FileTransferNegotiator.IBB_ONLY = true;
                                FileTransferNegotiator.setServiceEnabled(connection, true);
                                mFileTransferManager = new FileTransferManager(
                                        connection);
                                /*
                                 * OutgoingFileTransfer transfer =
                                 * mFileTransferManager
                                 * .createOutgoingFileTransfer
                                 * ("98c6d889473a6fae@pc/Smack");
                                 */
                                String to = connection.getRoster()
                                        .getPresence("98c6d889473a6fae@pc")
                                        .getFrom();
                                final OutgoingFileTransfer transfer = mFileTransferManager
                                        .createOutgoingFileTransfer(to);
                                File file = new File(filepath);

                                try {
                                    configureProviderManager(connection);
                                    transfer.sendFile(file, "test_file");
                                } catch (XMPPException e) {
                                    e.printStackTrace();
                                }
                                new AsyncTask<Void, Void, Void>() {


                                    protected void onPreExecute() {

                                    }

                                    @Override
                                    protected Void doInBackground(Void... params) {
                                        while (!transfer.isDone()) {
                                            if (transfer.getStatus().equals("Error")) {
                                                Log.d("file transfer",
                                                        "ERROR!!! " + transfer.getError());

                                            } else if (transfer.getStatus().equals("Cancelled")
                                                    || transfer.getStatus().equals("Refused")) {
                                                Log.d("file transfer",
                                                        "Cancelled!!! " + transfer.getError());
                                            }
                                            try {
                                                Thread.sleep(1000L);
                                            } catch (InterruptedException e) {
                                                e.printStackTrace();
                                            }
                                        }
                                        return null;
                                    };

                                    protected void onPostExecute(Void result) {

                                        if (transfer.getStatus().equals("Refused")
                                                || transfer.getStatus().equals("Error")
                                                || transfer.getStatus().equals("Cancelled")) {
                                            Log.i("file transfer", "refused cancelled error "
                                                    + transfer.getError());

                                        } else {

                                            Log.i("file transfer", "Success: " + transfer.getFileName());
                                        }
                                    };
                                }.execute();

                            }
                            d.dismiss();
                        }
                    });

关于android - 使用 xmpp 传输文件时出现错误代码 503,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28209488/

相关文章:

android - 如何区分手势和点击?

android - 将 fragment 实例保留在 FragmentPagerAdapter 中

Android Jabber (XMPP) 客户端

android - 如何使用 asmack android 从 Openfire 检索一对一的聊天记录

java - 如何在openfire中获取 "both"订阅类型

android - 删除时如何修复 'User does not have permission to access this object'错误

java - Android 中的 "foreign application"是什么?

android - 如何设置应用服务器以通过 FCM 向设备发送通知?

python - 创建一个与 Google Talk 集成的聊天机器人,最好使用 Python 或 Go

java.io.EOFException : no more data available - expected end tag </stream:stream> to close start tag <stream:stream> 异常