简体   繁体   中英

Android app getting error send image using Smack and Openfire 4.1.4

I'm developing chat app using XMPP with Openfire 4.1.4, One to one text chat working fine, but while I send image getting error

Here is my code for file send:

Log.e("ad",">selectedImagePath====="+selectedImagePath);
    FileTransferManager manager = FileTransferManager.getInstanceFor(Config.conn1);
                OutgoingFileTransfer transfer;
                transfer = manager.createOutgoingFileTransfer(userJid+"/"+Config.conn1); //JID - user@host/resource
                File file = new File(selectedImagePath);
                try {
                    transfer.sendFile(file, "image message test");
                } catch (Exception e) {
                    e.printStackTrace();
                }
                while (!transfer.isDone()) {
                    if (transfer.getStatus().equals(AMPExtension.Status.error)) {
                        Log.e("ad","ERROR!!! " + transfer.getError());
                    } else if (transfer.getStatus().equals(FileTransfer.Status.cancelled)
                            || transfer.getStatus().equals(FileTransfer.Status.refused)) {
                        Log.e("ad","Cancelled!!! " + transfer.getError());
                    }
                    try {
                        Thread.sleep(1000L);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                if (transfer.getStatus().equals(FileTransfer.Status.refused) ) {    
                    Log.e("ad","refused cancelled error" + transfer.getError());
                }
                else  if (transfer.getStatus().equals(FileTransfer.Status.error))
                {
                    Log.e("ad","error="+ transfer.getError());
                }
                else  if  (transfer.getStatus().equals(FileTransfer.Status.cancelled))
                {
                    Log.e("ad","cancelled");
                }
                else {
                    Log.e("ad","Success");
                }

Here is my log:

  02-23 14:56:32.489 14951-14951/com.app.chatv1 E/ad: >selectedImagePath=====/storage/emulated/0/Pictures/1519194363122.jpg
02-23 14:56:33.490 14951-14951/com.app.chatv1 E/ad: error=null

I have another related question: when I sent image to server successfully where it will place at server location?

   FileTransferManager ftm1 =FileTransferManager.getInstanceFor(connection);
   FileTransferManager ftm2=FileTransferManager.getInstanceFor(connection2);

    ftm2.addFileTransferListener(new FileTransferListener() {
        @Override
        public void fileTransferRequest(FileTransferRequest request) {
            IncomingFileTransfer ift = request.accept();
            try {
                InputStream is = ift.recieveFile();
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                int nRead;
                byte[] buf = new byte[1024];
                while ((nRead = is.read(buf,  0, buf.length)) != -1) {
                    os.write(buf, 0, nRead);
                }
                os.flush();
                dataReceived = os.toByteArray();
            } catch (SmackException | IOException | XMPPErrorException e) {
                e.printStackTrace();
            }
            if (Arrays.equals(dataToSend, dataReceived)) {
                System.out.println("Received data matches send data. \\o/");
            } else {
                System.err.println("Recieved data DOES NOT match send data. :(");
            }
        }
    });

    OutgoingFileTransfer oft = ftm1.createOutgoingFileTransfer(XmppStringUtils.completeJidFrom(USER, SERV, "resourse"));
    oft.sendStream(new ByteArrayInputStream(dataToSend), "hello.txt", dataToSend.length, "A greeting");
    outerloop: while (!oft.isDone()) {
        switch (oft.getStatus()) {
        case error:
            System.out.println("Filetransfer error: " + oft.getError());
            break outerloop;
        default:
            System.out.println("Filetransfer status: " + oft.getStatus() + ". Progress: " + oft.getProgress());
            break;
        }
        Thread.sleep(1000);
    }

    connection.disconnect();
    connection2.disconnect();
    Thread.sleep(1000);
}

the one connection is sending file and another connection is receiving this is working code.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM