2010-10-02 6 views
2

Je veux écrire une application Android qui peut afficher certaines données reçues (interrogées) à partir d'une ressource Internet.Application Android utilisant les données du service web

Je suppose que j'ai besoin d'écrire une logique qui appellera périodiquement et obtiendra des données à partir d'une extrémité, analysera la réponse et l'affichera. Y a-t-il un bon tutoriel pour toutes ces étapes?

Je sais très peu de choses sur la programmation Android au momment et peut-être qu'il vaut mieux commencer avec quelque chose de plus simple. Je veux juste savoir quoi chercher tout en apprenant et rassembler quelques ressources sur ceci.

Répondre

3

Ce que vous voulez faire est de développer un api de repos qui fournit des données pour votre application Android. Par exemple. Votre site Web contient du contenu que vous souhaitez utiliser dans votre application. Vous pouvez alors écrire un script php qui renvoie simplement ces données dans un format spécifique.

E.g. mysite.net/rest/fetchAllLocations.php?maybe_some_parameters

Cela retournerait des emplacements dans, par ex. format json, voici un exemple à quoi cela ressemble:

[{"id": 1, "shop_lng": 8.5317153930664, "shop_lat": 52.024803161621, "shop_zipcode": 33602, "shop_city": "Bielefeld", "shop_street": "Arndtstra \ u00dfe", "shop_snumber": 3, "shop_name": "M \ u00fcller", "shop_desc": "Kaufhaus"}]

Voici un exemple pour une demande de repos api:

http://shoqproject.supervisionbielefeld.de/public/gateway/gateway/get-shops-by-city/city/Bielefeld

Alors, quand vous avez votre repos api mis en place, vous pouvez traiter de recevoir ces données avec votre téléphone Android. J'utilise une méthode statique pour obtenir ces données:

public class JsonGrabber{ 

    public static JSONArray receiveData(){ 
     String url = "your url"; 
     String result = ""; 

     DefaultHttpClient client = new DefaultHttpClient(); 
     HttpGet method = new HttpGet(url); 
     HttpResponse res = null; 

     try { 
      res = client.execute(method); 
     } catch (ClientProtocolException e1) { 
      e1.printStackTrace(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 

     try{ 
      InputStream is = res.getEntity().getContent(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1")); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
      } 
      is.close(); 
      result = sb.toString(); 
     }catch(Exception e){ 
      Log.e("log_tag", "Error converting result "+e.toString()); 
     } 

     JSONArray jArray = null; 

     try{ 
      jArray = new JSONArray(result); 
     }catch(JSONException e){ 
       Log.e("log_tag", "Error parsing data "+e.toString()); 
     } 

     return jArray; 
    } 
} 

Eh bien c'est tout, une fois que vous avez vos données au format JSON il vous suffit de l'analyser:

JSONArray test = (JSONArray) JsonGrabber.receiveData() 

try { 
    for(int i=0;i<test.length();i++){ 
    JSONObject json_data = test.getJSONObject(i); 
    int id = json_data.getInt("id"); 
    } 
} 

La demande web devrait fonctionner dans un autre thread, car cela peut prendre beaucoup de temps. Vous devez donc faire face à AsyncTask. Voici quelques ressources:

Painless Threading Multithreading for performance Hello Android Tutorial

+0

Merci beaucoup. C'est très utile. Je suis familier avec REST et de fournir des api de repos pour les applications web. Je crois que j'aurai aussi besoin d'une classe Timer pour programmer une interrogation de données (si je veux rafraîchir quelque chose automatiquement)? – dzida

+0

Je n'ai jamais utilisé une minuterie pour rafraîchir l'interface utilisateur, juste mettre à jour votre interface utilisateur sur certains événements, qui reste simple –

+0

Je pense à l'application qui affiche la vue de permet de dire «tweets actuels». Je pense qu'il pourrait utiliser une minuterie pour le faire automatiquement à intervalles réguliers. De toute façon, implementig timer ne devrait pas poser de problème (je pense). – dzida

Questions connexes