Código de error 503 en la transferencia de archivos mediante xmpp
Estoy intentando enviar un archivo de imagen usando smack y openfire xmpp. Para esto estoy usando la clase FileTransferManager. Para usar la clase FileTransferManager estoy usando asmack-android-6.jar . Seguí este enlace para compartir archivos. Este problema también se comparte en los comentarios de este tutorial pero no se da una buena resolución a este problema. Luego he buscado sobre el desbordamiento de pila, muchos desarrolladores han hecho esta pregunta, pero sólo 1-2 tienen respuestas que han aceptado, otros no.
He estudiado todas las respuestas que he encontrado, probado todas las formas que google me dio, pero aún no puede resolver este problema.
- InstanceID y Regid GCM
- Documentación y depuración de aSmack Android
- ¿Cómo obtener el historial de chat Openfire en un dispositivo Android con aSmack?
- ¿Cuál es la diferencia entre Smack y aSmack?
- ¿Es la mejor práctica para las conexiones móviles persistentes en Android?
El código que usé es:
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(); } });
El logcat que conseguí es muy grande, así que le di un enlace de eso. Así que puede alguien decir cuál es el error que estoy haciendo o puede sugerir qué enmienda hago para lograr la tarea
- Las solicitudes de recibo de entrega no funcionan para XMPP Android (aSmack)
- Creación de un servidor xmpp para google google anterior
- Cómo habilitar el XEP-0199 en Smack?
- ¿Qué debe ser el JID para un usuario en OpenFire Server?
- No se puede enviar o recibir presencia con ASmack
- XMPP Group Chat Android
- Proveedor personalizado de IQ no reconocido
- Cuestión en el registro con la biblioteca asmack y abrir fuego como servidor
Este problema se resolvió con este enlace respuesta no sé por qué su downvoted. Lemme compartir respuesta aquí también
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(); } });
- Tarea de integración de prueba independiente en gradle con android
- ¿Cómo implementar Moquette broker en Android?