2012-12-31 5 views
2

J'espère que ce n'est pas trop de charabia. J'ai implémenté un appel de service Web Async parce que je ne voulais pas que le téléphone/l'application/ui se verrouille en attendant des données ... mais je ne veux pas que le programme continue d'exécuter ce qui est en train de se faire et de se bloquer .Appel de service asynchrone doit mettre en pause

Mon application demande des données du service et le service renvoie un doc xml. Pendant que le service génère le document, mon programme continue à s'exécuter et tombe en panne lorsqu'il arrive à la section où le code recherche le fichier ... ce n'est pas encore le cas.

J'ai donc besoin de savoir comment/quoi fait une personne dans Java pour ce scénario? En C#, je saurais quoi faire. Voici le code de l'appel asynchrone et n'hésitez pas à signaler tout problème.

public class DataExchangeServiceClient 
{ 
private static final String BASE_URL = "http://www.icyarmtesting.com/"; 

private static AsyncHttpClient client = new AsyncHttpClient(); 

public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) 
{ 
    client.get(getAbsoluteUrl(url), params, responseHandler); 
} 

public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) 
{ 
     client.post(getAbsoluteUrl(url), params, responseHandler); 
    } 

    private static String getAbsoluteUrl(String relativeUrl) 
    { 
     return BASE_URL + relativeUrl; 
    } 

} 

puis l'implémentation ... oui je sais qu'il est codé en dur pour l'instant.

protected static boolean GetExerciseData() throws JSONException 
{ 
    RequestParams params = new RequestParams(); 
    params.put("Action", ""); 
    params.put("ProgramID", "8008009"); 
    params.put("UserName", "joex"); 
    params.put("Password", "dude!"); 


    DataExchangeServiceClient.get("liftdataexchange.xamlx", params, new JsonHttpResponseHandler() 
    { 
     @Override 
     public void onSuccess(JSONArray timeline) 
     { 
      try 
      { 
      JSONObject firstEvent = (JSONObject) timeline.get(0); 
      String XML_DOC_String = firstEvent.getString("text"); 
      } 
      catch(JSONException jse) 
      { 

      } 
      //send it off to become a document 
     } 
    }); 

    return true; 

} 

Répondre

0

Il existe différentes solutions à votre problème. Mais le meilleur est d'utiliser un service Android. Je vais vous expliquer un peu plus vos alternatives.

  • Vous pouvez commencer une nouvelle Thread
  • Vous pouvez utiliser un AyncTask (plus Android)
  • Vous pouvez utiliser un Loader
  • Vous pouvez utiliser un service

Je suis le co -auteur d'une bibliothèque dédiée à ce sujet: RoboSpice. Voici un infographics qui explique pourquoi l'utilisation d'un service est la meilleure approche. C'est ce que nous faisons dans RoboSpice et nous croyons vraiment que c'est la meilleure façon d'exécuter une tâche de fond à long terme, comme le téléchargement de données sur le Web. Plus sur RoboSpice fournit différents modules pour vous aider à effectuer des demandes REST telles que le module Spring Android, module Google Http Java Client (ou Retrofit, bientôt disponible). Je vous encourage à vous diriger vers cette bibliothèque, il va gérer une grande partie de la complexité des tâches de fond pour vous.

+0

Eh bien, pour être honnête avec vous, j'ai regardé Robospice parce que j'ai commencé avec l'AsyncTask Android et obtenait de nombreuses erreurs. Robospice avait l'air génial mais je me suis perdu en essayant de déchiffrer les trois bibliothèques dont j'avais besoin. C'est tout un nouveau monde pour moi et même si je n'ai pas peur d'apprendre je ne suis pas encore capable de déchiffrer une grande quantité d'informations complexes spécifiques au monde java. – GPGVM

+0

Bien pour nous donner cette rétroaction. Nous construisons actuellement une nouvelle façon d'aider les développeurs non-robots à utiliser RoboSpice: nous fournissons des échantillons simples et vous pouvez facilement les transformer en un projet ADT standard en utilisant ant. Voulez-vous essayer cela? – Snicolas

+0

Absolument. Je suis prêt à aider. Si vous cherchez un utilisateur stupide, je suis votre homme. Honnêtement, j'ai été un développeur C# .NET pendant 15 ans, donc je suis assez à l'aise avec le développement en train d'apprendre un nouvel environnement (Eclipse) et la langue (Java). – GPGVM

Questions connexes