IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Web Service avec client Android


Sujet :

API standards et tierces Android

  1. #1
    Candidat au Club
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Web Service avec client Android
    Bonjour,

    J'essaye de consommer un web service comme client Android qui affiche les informations d'un pays comme la température, l'humidité et autres.

    Ca fonctionne si on met un pays qui existe mais si on met un pays qui n'existe pas l'application se bloque en demandant une fermeture de l'application.

    J'aimerais que si on entre un pays invalide, un message popup s'affiche comme ''pays invalide".

    Voici le code :
    activity_main.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
     
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginTop="15dp"
            android:text="@string/location"
            android:textAppearance="?android:attr/textAppearanceMedium" />
     
        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/textView1"
            android:layout_alignParentRight="true"
            android:ems="10" />
     
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/textView2"
            android:layout_marginTop="19dp"
            android:text="@string/temperature"
            android:textAppearance="?android:attr/textAppearanceSmall" />
     
        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView3"
            android:layout_below="@+id/textView3"
            android:layout_marginTop="32dp"
            android:text="@string/humidity"
            android:textAppearance="?android:attr/textAppearanceSmall" />
     
        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView4"
            android:layout_below="@+id/textView4"
            android:layout_marginTop="21dp"
            android:text="@string/pressure"
            android:textAppearance="?android:attr/textAppearanceSmall" />
     
        <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/textView3"
            android:layout_toRightOf="@+id/textView3"
            android:ems="10" />
     
        <EditText
            android:id="@+id/editText3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/textView3"
            android:layout_alignBottom="@+id/textView3"
            android:layout_alignLeft="@+id/editText2"
            android:ems="10" />
     
        <EditText
            android:id="@+id/editText4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/textView5"
            android:layout_alignLeft="@+id/editText1"
            android:ems="10" />
     
        <EditText
            android:id="@+id/editText5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/textView5"
            android:layout_alignBottom="@+id/textView5"
            android:layout_alignRight="@+id/editText4"
            android:ems="10" />
     
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView1"
            android:layout_below="@+id/textView1"
            android:layout_marginTop="40dp"
            android:text="@string/country"
            android:textAppearance="?android:attr/textAppearanceSmall" />
     
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/editText3"
            android:layout_below="@+id/editText5"
            android:layout_marginTop="78dp"
            android:onClick="open"
            android:text="@string/weather" />
     
    </RelativeLayout>
    MainActivity
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    package com.example.jsonparser;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
     
    public class MainActivity extends Activity {
     
        private String url1 = "http://api.openweathermap.org/data/2.5/weather?q=";
        private EditText location, country, temperature, humidity, pressure, message;
        private HandleJSON obj;
        private Button bouton;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            location = (EditText) findViewById(R.id.editText1);
            country = (EditText) findViewById(R.id.editText2);
            temperature = (EditText) findViewById(R.id.editText3);
            humidity = (EditText) findViewById(R.id.editText4);
            pressure = (EditText) findViewById(R.id.editText5);
            bouton = (Button) findViewById(R.id.button);
            bouton.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    open(v);
                }
            }); 
        }
     
        public void open(View view) {
            String url = location.getText().toString();
            String finalUrl = url1 + url;
            obj = new HandleJSON(finalUrl);
            obj.fetchJSON();
     
            while (obj.parsingComplete);
            country.setText(obj.getCountry());
            temperature.setText(obj.getTemperature());
            humidity.setText(obj.getHumidity());
            pressure.setText(obj.getPressure());
        }
    }
    HandleJSON
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    package com.example.jsonparser;
     
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
     
    import org.json.JSONObject;
     
    import android.annotation.SuppressLint;
     
    public class HandleJSON {
     
        private String country = "county";
        private String temperature = "temperature";
        private String humidity = "humidity";
        private String pressure = "pressure";
        private String urlString = null;
     
        public volatile boolean parsingComplete = true;
     
        public HandleJSON(String url) {
            this.urlString = url;
        }
     
        public String getCountry() {
            return country;
        }
     
        public String getTemperature() {
            return temperature;
        }
     
        public String getHumidity() {
            return humidity;
        }
     
        public String getPressure() {
            return pressure;
        }
     
        @SuppressLint("NewApi")
        public void readAndParseJSON(String in) {
            try {
                if (!in.equals("")) {
                JSONObject reader = new JSONObject(in);
     
                JSONObject sys = reader.getJSONObject("sys");
                country = sys.getString("country");
     
                JSONObject main = reader.getJSONObject("main");
                temperature = main.getString("temp");
                pressure = main.getString("pressure");
                humidity = main.getString("humidity");
                }
                parsingComplete = false;
     
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
     
        public void fetchJSON() {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        URL url = new URL(urlString);
                        String data = null;
                        InputStream stream = null;
                        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                        conn.setReadTimeout(10000 /* milliseconds */);
                        conn.setConnectTimeout(15000 /* milliseconds */);
                        conn.setRequestMethod("GET");
                        conn.setDoInput(true);
                        conn.connect();
                        if (conn.getResponseCode() != 200) {
                            stream = conn.getErrorStream();
                            data = "";    
                            readAndParseJSON(data);
                            stream.close();
                        }
                        else {
                        stream = conn.getInputStream();
                        data = convertStreamToString(stream);    
                        readAndParseJSON(data);
                        stream.close();
                        }
     
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
     
            thread.start();
        }
     
        @SuppressWarnings("resource")
        static String convertStreamToString(java.io.InputStream is) {
            java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
            return s.hasNext() ? s.next() : "";
        }
    }
    Quelqu'un saurait-il m'indiquer comment faire ?

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    C'est surement parce que si tu envois un pays qui n'existe pas, la réponse JSON n'est pas formé normalement et donc ton parsing échoue et fait planter l'appli.
    Etudies le format JSON dans ce cas, ou bien testes l'existence des objets lors du parsing : if(sys==null) //message d'erreur
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

Discussions similaires

  1. Création de web service pour client Android
    Par zizouuu8585 dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 13/03/2013, 00h22
  2. web service avec android
    Par naimi atef dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 22/04/2011, 17h38
  3. Client c# et Axis2 Web Service avec https
    Par netking2006 dans le forum Services Web
    Réponses: 1
    Dernier message: 28/10/2009, 17h13
  4. Client c# et Axis2 Web Service avec https
    Par netking2006 dans le forum Services Web
    Réponses: 1
    Dernier message: 28/10/2009, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo