Я использую сервер Smack и Openfire для клиента чата, все работает хорошо, как чат, отправка приглашение на новое добавление пользователя, получение списка доступных пользователей и т. д. Я столкнулся с ошибкой ClassCastException, когда я пытаюсь отправить файл от клиента android другому пользователю, используя приведенный ниже код, который дает мне стек ошибок.
ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
if (sdm == null)
sdm = new ServiceDiscoveryManager(connection);
sdm.addFeature("http://jabber.org/protocol/disco#info");
sdm.addFeature("jabber:iq:privacy");
fileTransfer(fileName, recepient.getText().toString() + "/Spark 2.6.3");
public void fileTransfer(String fileName, String destination) throws XMPPException {
FileTransferNegotiator.setServiceEnabled(connection,true);
OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(destination);
transfer.sendFile(new File(fileName), "You won't believe this!");
try {
Thread.sleep(10000);
}
catch(Exception e){
Toast.makeText(getActivity(), "Exception " + e, Toast.LENGTH_LONG).show();
}
System.out.println("Status :: " + transfer.getStatus() + " Error :: " + transfer.getError() + " Exception :: " + transfer.getException());
System.out.println("Is it done? " + transfer.isDone());
Toast.makeText(getActivity(), "Status :: " + transfer.getStatus() + " Error :: " + transfer.getError() + " Exception :: " + transfer.getException(), Toast.LENGTH_LONG).show();
Log.v("ONMESSAGE", "Status :: " + transfer.getStatus() + " Error :: " + transfer.getError() + " Exception :: " + transfer.getException());
}
Когда я пытаюсь отправить файл, он появляется на искре другого конца в однако при нажатии на кнопку «Принять», не начинает передачу файла, вместо этого он показывает «Ошибку в файле перенося».
В журнал ошибок, он показывает мне ошибку ниже:
07-25 12:08:22.393: E/AndroidRuntime(27708): java.lang.ClassCastException: org.jivesoftware.smack.PacketReader$4 cannot be cast to org.jivesoftware.smackx.packet.StreamInitiation
07-25 12:08:22.393: E/AndroidRuntime(27708): at org.jivesoftware.smackx.filetransfer.FileTransferNegotiator.negotiateOutgoingTransfer(FileTransferNegotiator.java:401)
07-25 12:08:22.393: E/AndroidRuntime(27708): at org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer.negotiateStream(OutgoingFileTransfer.java:300)
07-25 12:08:22.393: E/AndroidRuntime(27708): at org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer.access$100(OutgoingFileTransfer.java:35)
07-25 12:08:22.393: E/AndroidRuntime(27708): at org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer$2.run(OutgoingFileTransfer.java:214)
07-25 12:08:22.393: E/AndroidRuntime(27708): at java.lang.Thread.run(Thread.java:838)
N.B .: Я использую Смак Library.
Почему вы спите? – alicanbatur
неважно, что я нашел ответ. Фактически, где-то я читал этот поток раньше, просто исследовал его и нашел ответ. Я отправляю ответ ниже. – Saty