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);
Ressemble à un toString qui est utilisé défectueux si vous voulez la réponse? – Tobias
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
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