2011-11-08 2 views
0

J'ai une application android qui appelle un service web à plusieurs reprises tout au long de l'application. Depuis que l'appel de la méthode ksoap2 rend l'application non réactive, j'ai dû mettre le tout dans la classe AsyncTask.android Réponse de ksoap2 issue

Tout ce que j'ai fait est de faire apparaître un ProgressDialog sur onPreExecute(), et l'appel au service web sur doInBackground, comme dans mon programme principal. Cependant, bien que l'appel au service Web fonctionne, la réponse du service Web est "[email protected]". FYI com.SmartInfinity est mon package d'application, InfinityMain est mon activité principale et webServiceCall est la méthode qui appelle le service Web.

Est-ce que quelqu'un a une idée de ce qui se passe? Le service Web est censé renvoyer les résultats sous la forme "[champ_x1 = valeur_x1; champ_y1 = valeur + y1; champ_x2 = valeur_x2; champ_y2 = valeur_y2;]" Lorsque j'appelle la même fonction avec les mêmes arguments en dehors de la tâche Async, cela fonctionne parfaitement .

Merci pour votre aide.

Edit: voici mon code:

private class webServiceCall extends AsyncTask<String, Void, Object> 
{ 
    @Override 
    protected void onPreExecute() 
    { 
     dialog.show(); 
    } 

    protected Object onPostExecute(Object... params) 
    { 
     dialog.dismiss(); 
     return params; 
    } 

    @Override 
    protected Object doInBackground(String... params) 
    { 
     Object result = null; 
     String[] temp = new String[params.length - 2]; 
     String method_name = params[0]; 
     String action_name = params[1]; 
     for (int i = 2; i < params.length; i++) 
     { 
      temp[i-2] = params[i]; 
     } 
     result = callWebService(method_name, action_name, temp, 60); 
     dialog.dismiss(); 
     return result; 
    } 

} 

Le résultat est ensuite converti en une chaîne et utilisée normalement. Voici comment j'appelle le processus AsyncTask et mon résultat:

Object result = new webServiceCall().execute(UserArgs); 


     String str = result.toString(); 
     String delims = "[=;]+"; 
     String [] stringuser = str.split(delims); 
+0

Ressemble à un toString qui est utilisé défectueux si vous voulez la réponse? – Tobias

+0

En fait oui, je prends la réponse comme un objet et j'utilise .toString(), mais c'est aussi ce que je fais en dehors de l'AsyncTask, et ça marche bien. Comment puis-je surmonter cela? – Athan

+0

Le toString() doit alors être appelé sur un objet vide (parce que son exécution avant que la réponse soit disponible?) Ce serait bien avec le code approprié pour ce problème. Ne devrait pas être trop difficile à comprendre :) – Tobias

Répondre

1

Object = new résultat webServiceCall() execute (UserArgs);.

C'est votre problème. Le nouveau webServiceCall(). Execute (UserArgs); ne renvoie pas le résultat de votre asyncTask, il ne renvoie qu'une référence à votre tâche. Le résultat de votre callWebService est envoyé à onPostExecute(). C'est ici que vous pouvez utiliser le résultat. Appelez un rappel d'ici ou vous pouvez utiliser le résultat directement (ici vous êtes de retour dans l'interface utilisateur, vous pouvez donc modifier l'interface utilisateur ici).

+0

Ok, le résultat est envoyé à onPostExecute(), mais cela est marqué par Eclipse comme jamais utilisé localement, je ne comprends pas ... – Athan

+0

Que se passe-t-il si vous ajoutez @Overridde dessus? Si cela fonctionne quand même, alors ne vous occupez jamais de l'éclipse, parfois le bug de l'interface utilisateur d'éclipse et les avertissements ne vous empêchent pas de compiler. Désolé je ne peux pas vous aider plus aurait besoin de l'ensemble du projet s'il n'y a pas de raison pour l'avertissement. – Tobias