Je développe un APP et il a une fonctionalité qui peut être utilisé par l'utilisateur de deux façons différentes: faire le travail en temps réel, alors il/elle doit attendre que la tâche se termine; ou faire la tâche en arrière-plan afin qu'il/elle puisse faire d'autres choses en attendant.ksoap2 - Même méthode fonctionne wih AsyncTask mais pas lors de l'utilisation à l'intérieur de l'activité normale
J'ai développé la tâche en arrière-plan avec AsyncTask et cela fonctionne, mais je ne sais pas pourquoi je reçois et erreur quand j'essaie d'appeler la même méthode dans une activité normale.
Ceci est la méthode qui utilise ksoap2, la valeur du param je teste avec est « http://www.google.com »
public String sendURL(String url) {
Log.i("URL", url);
//Create request
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("url", url);
//Create envelope
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = false;
envelope.implicitTypes = true;
envelope.setAddAdornments(false);
envelope.setOutputSoapObject(request);
//Create HTTP call object
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;
androidHttpTransport.setXmlVersionTag("<!--?xml version=\"1.0\" encoding= \"UTF-8\" ?-->");
SoapPrimitive response = null;
try {
//Invoke web service
androidHttpTransport.call(SOAP_ACTION, envelope); // HERE is where I'm getting the error
//Get the response
response = (SoapPrimitive) envelope.getResponse();
// Return the response
return response.toString();
} catch (SocketException e) {
e.printStackTrace();
// TODO Error, el servidor no esta levantado
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
return null;
}
C'est l'erreur de sortie que je reçois d'Android Studio:
03-28 09:25:50.291 17894-17894/es.sia.urlanalyzer W/System.err: java.net.MalformedURLException
03-28 09:25:50.291 17894-17894/es.sia.urlanalyzer W/System.err: at java.net.URL.<init>(URL.java:152)
03-28 09:25:50.291 17894-17894/es.sia.urlanalyzer W/System.err: at java.net.URL.<init>(URL.java:125)
03-28 09:25:50.291 17894-17894/es.sia.urlanalyzer W/System.err: at org.ksoap2.transport.ServiceConnectionSE.<init>(ServiceConnectionSE.java:39)
03-28 09:25:50.291 17894-17894/es.sia.urlanalyzer W/System.err: at org.ksoap2.transport.HttpTransportSE.getServiceConnection(HttpTransportSE.java:104)
03-28 09:25:50.291 17894-17894/es.sia.urlanalyzer W/System.err: at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:61)
03-28 09:25:50.291 17894-17894/es.sia.urlanalyzer W/System.err: at es.sia.urlanalyzer.Analyze.sendURL(Analyze.java:377)
03-28 09:25:50.291 17894-17894/es.sia.urlanalyzer W/System.err: at es.sia.urlanalyzer.Analyze$1.onClick(Analyze.java:167)
03-28 09:25:50.291 17894-17894/es.sia.urlanalyzer W/System.err: at android.view.View.performClick(View.java:5198)
03-28 09:25:50.291 17894-17894/es.sia.urlanalyzer W/System.err: at android.view.View$PerformClick.run(View.java:21147)
03-28 09:25:50.291 17894-17894/es.sia.urlanalyzer W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
03-28 09:25:50.291 17894-17894/es.sia.urlanalyzer W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
03-28 09:25:50.292 17894-17894/es.sia.urlanalyzer W/System.err: at android.os.Looper.loop(Looper.java:148)
03-28 09:25:50.292 17894-17894/es.sia.urlanalyzer W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
03-28 09:25:50.292 17894-17894/es.sia.urlanalyzer W/System.err: at java.lang.reflect.Method.invoke(Native Method)
03-28 09:25:50.292 17894-17894/es.sia.urlanalyzer W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
03-28 09:25:50.292 17894-17894/es.sia.urlanalyzer W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
la même méthode, exactement la même chose, fonctionne très bien dans une classe personnalisée qui étend AsyncTask. Les valeurs des appels SOAP au service Web sont:
String NAMESPACE = "http://10.0.2.2:4894/AnalyzeURL_WS/services/";
String URL = "http://10.0.2.2:4894/AnalyzeURL_WS/services/AnalyzeURL";
String SOAP_ACTION = "http://10.0.2.2:4894/AnalyzeURL_WS/services/analyze";
String METHOD_NAME = "analyze";
Je pense que votre problème est AsyncTask pas KSOP –
si vous me dites l'organigramme de votre programme je peux aider you.When fonctionne et async ainsi de suite. –