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

Android Discussion :

Parser données JSON


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 131
    Points : 37
    Points
    37
    Par défaut Parser données JSON
    Bonjour alors voilà je suis entrain de faire une appli et je butte sur le parsage des donnees via GSon qui semble la librairie la plus rapide

    j'ai donc suivi un tuto, telecharger Gson , ajouter la librairie mais lorsque je lance l appli ca plante

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.MainActivity}: android.os.NetworkOnMainThreadException

    je ne comprends pas trop ci joint mes fichiers



    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
     
    package com.example.test;
     
    import android.os.Bundle;
    import android.app.Activity;
     
    import com.google.gson.Gson;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.util.List;
     
     
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
     
    import android.util.Log;
    import android.widget.Toast;
     
    import com.example.model.Result;
    import com.example.model.SearchResponse;
     
     
    public class MainActivity extends Activity {
    	 String url = "http://search.twitter.com/search.json?q=javacodegeeks";
     
    	    @Override
    	    public void onCreate(Bundle savedInstanceState) {
     
    	        super.onCreate(savedInstanceState);
    	        setContentView(R.layout.activity_main);
     
    	        InputStream source = retrieveStream(url);
     
    	        Gson gson = new Gson();
     
    	        Reader reader = new InputStreamReader(source);
     
    	        SearchResponse response = gson.fromJson(reader, SearchResponse.class);
     
    	        Toast.makeText(this, response.query, Toast.LENGTH_SHORT).show();
     
    	        List<Result> results = response.results;
     
    	        for (Result result : results) {
    	            Toast.makeText(this, result.fromUser, Toast.LENGTH_SHORT).show();
    	        }
     
    	    }
     
    	    private InputStream retrieveStream(String url) {
     
    	        DefaultHttpClient client = new DefaultHttpClient(); 
     
    	        HttpGet getRequest = new HttpGet(url);
     
    	        try {
     
    	           HttpResponse getResponse = client.execute(getRequest);
    	           final int statusCode = getResponse.getStatusLine().getStatusCode();
     
    	           if (statusCode != HttpStatus.SC_OK) { 
    	              Log.w(getClass().getSimpleName(), 
    	                  "Error " + statusCode + " for URL " + url); 
    	              return null;
    	           }
     
    	           HttpEntity getResponseEntity = getResponse.getEntity();
    	           return getResponseEntity.getContent();
     
    	        } 
    	        catch (IOException e) {
    	           getRequest.abort();
    	           Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
    	        }
     
    	        return null;
     
    	     }
    }
    cela plante ici car en ne mettant juste ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void onCreate(Bundle savedInstanceState) {
     
    	        super.onCreate(savedInstanceState);
    	        setContentView(R.layout.activity_main);
    }
    il n y a aucune erreur, donc voila si vous pouvez m'aidez merci

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GSon qui semble la librairie la plus rapide
    Je croyais que c'était jackson ?

    En fait GSon (et Jackson) sont bien pour sérialiser/désérialiser plein d'objets complexes... quand on fait 3 properties par "élément" d'un tableau c'est autre chose, et si le tableau n'est pas très grand (< 10000 rows), on peut tout lire en mémoire et un simple: JSONArray array = new JSONArray(string); suffit

    Bon... alors trêve de bavardage, en ce qui concerne le code....
    Le NOMTE est une sécurité rajoutée depuis Android3 permettant de s'assurer que les programmeurs ne font pas des trucs sales, entre autre, des actions potentiellement longues dans le thread de l'UI (onClick, onCreate, ....).
    Non seulement, c'est pas agréable d'attendre 5s que le click sur un bouton réagisse, mais en plus, il y a un risque de "Non Responsive Application".

    On parle d'action lente, dès qu'un truc dure plus d'une demi seconde par exemple, ce qui est systématiquement le cas d'un appel sur le réseau (ouverture de la connexion réseau si pas déjà fait, résolution du nom du host, connexion TCP, envoi de la requête, attente de la réponse, réception de la réponse)... Donc dès qu'on touche au réseau, dans le thread UI, bim NOMTE.

    Voir les AsyncTask pour solutionner le problème.


    Indépendamment du NOMTE, quelques erreurs:
    * Pas de test sur la valeur de retour: "return null;" en cas d'erreur => NPE si exception il y a.
    * Aucun signalement de l'erreur à l'utilisateur...
    * pas d'utilisation de getContentEncoding() pour savoir quel charset est utilisé pour la réponse (là il utilise le default charset tout le temps)
    * Le test du status-code n'est pas bon.... toutes les valeurs de 200 à 399 sont sensées être "bonnes".... Surtout de 200 à 299 ^^
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 131
    Points : 37
    Points
    37
    Par défaut
    En fait j ai un tableau d'objets et dans les objets certaines property sont eux même des tableaux qui contiennent des objets qui eux même contiennent des property

    bah concernant la vitesse j ai vu ça ici

    http://martinadamek.com/2011/02/01/a...er-comparison/

    je vais voir ça pour l AsyncTask

    Merci

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Oui, mais ça c'est le parsing d'une donnée plein de fois etc...

    Sur une itération:
    http://www.martinadamek.com/2011/02/...le-iterations/

    D'un coup, l'utilisation de Jackson/GSon par rapport à "android de base" devient moins.... intéressante

    Un timing est intéressant par rapport à quelque chose... Ici, le HTTP Get peut prendre potentiellement 1 à 2 secondes (excellent serveur), rendant le parsing lui-même anecdotique, et du coup... l'optimisation du parsing est à réaliser ... plus tard
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 131
    Points : 37
    Points
    37
    Par défaut
    ok je vois ça ^^

    Sinon je regarde les tutos la par rapport a l asynctask mais je vois pas trop comment faire dans mon cas ?

    Il faut que j enleve tout ce qui se trouve dans mon oncreate et que je recreer une fonction externe qui extends asynctask c est ca ?

    Si tu as un tuto c est pas de refus

    Merci

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Ben j'ai même posté dans la FAQ une classe pour lire du JSON....

    Par contre ça utilise l'implémentation par défaut d'Android, il suffit de la modifier un poil....
    http://www.developpez.net/forums/d12...lire-json-url/
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 131
    Points : 37
    Points
    37
    Par défaut
    euh ca me met

    Ce forum est protégé par mot de passe. Veuillez insérer ce mot de passe maintenant.
    Remarque : ceci nécessite que les cookies soient activés !

  8. #8
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Par exemple:
    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
     
     
    /**
     * 
     */
    public class GSONTask<T> extends AsyncTask<HttpUriRequest, Void, T> {
     
        /**
         * L'interface d'écoute des resultats.
         */
        public static interface OnGSONResult<T>
        {
            /**
             * Sera appelé quand l'objet JSON sera recu.
             * @param res
             */
            public  void    onGSONResult(T res);
            /**
             * Sera appelé quand une erreur a eu lieu pendant la requête.
             * @param error
             */
            public  void    onGSONFailure(Throwable error);
        }
     
        private Class<T> gsonClass;
        private OnGSONResult<T> callback;
        private Throwable error;
     
        private static Gson gson = new Gson();
     
     
        /**
         * Définit le callback pour les résultats.
         * @param cb L'interface de callback utiliser.
         */
        public GSONTask(Class<T> cl, OnGSONResult<T> cb)
        {
            this.gsonClass = cl;
            this.callback= cb;
        }
     
        @Override
        protected T doInBackground(HttpUriRequest ... params) {
            T ret = null;
            InputStream entityStream = null;
            try {
                HttpClient localClient = getHttpClient();
                HttpResponse response = null;
                for (HttpUriRequest request : params)
                    response = localClient.execute(request);
                if (response == null)
                    throw new IOException("No response received ! Did you pass any request ?"); 
                int respCode = response.getStatusLine().getStatusCode();
                if (respCode >= 400)
                    throw new IOException(response.getStatusLine().getReasonPhrase());
     
                HttpEntity entity = response.getEntity();
                entityStream  = entity.getContent();
                String charset = (entity.getContentEncoding() == null) ? null : entity.getContentEncoding().getValue();
                if (charset == null)
                    charset = Charset.defaultCharset().name();
                Reader reader = new InputStreamReader(entityStream,charset);
                Log.i("GSONTask","Decoding response from server..."); 
                ret = (T) gson.fromJson(reader, this.gsonClass);
            } catch (Throwable t) {
                Log.w("GSONTask","Error while retrieving JSON",t);
                this.error = t;
            } finally {
                if (entityStream  != null) {
                  try { entityStream.close(); } catch (Exception ex) { Log.e("GSONTask","Failed to gracefully close the entity stream !",ex); }
                }
            }
            return ret;
        }
     
        /**
         * Surchargez cette fonction pour créer le lien vers un autre client, ou pour ajouter des paramètres au client (agent-string / timeouts / ...).
         * @return HttpClient
         */
        protected HttpClient getHttpClient() {
            return new DefaultHttpClient();
        }
     
        @Override
        protected void onPostExecute(T result) {
            if (this.callback != null) {
                if (this.error != null)
                    this.callback.onGSONFailure(this.error);
                else
                    this.callback.onGSONResult(result);
            }
        }
     
    }
    MAJ: Correction de la fermeture des ressources.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 131
    Points : 37
    Points
    37
    Par défaut
    euh ok mais j ai jamais vu ce genre de truc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class GSONTask<T> 
     
    Donc ensuite dans mon 
     
    	    @Override
    	    public void onCreate(Bundle savedInstanceState) {
     
    	        super.onCreate(savedInstanceState);
    	        setContentView(R.layout.activity_main);
     
    	    }
    je suis sensé faire comment ?


    merci

  10. #10
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    public class GSONTask<T>
    Lire un cours sur les "generics" dans Java. Ca permet de rendre "fortement typé" une classe générique...


    Dans ton activité... commencer par implémenter: GSONTask.OnGSONResult<SearchResponse>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MainActivity extends Activity implements GSONTask.OnGSONResult<SearchResponse>
    Fournir le code aux deux fonctions nécessaires.... à savoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void onGSONResult(SearchResponse)
    et
    public void onGSONFailure(Throwable)
    Ensuite dans le onCreate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    GSONTask<SearchResponse> task = new GSONTask<SearchResponse>(SearchResponse.class,this);
    task.execute(new HttpGet(url));
    Et voila... en cas d'erreur, onGSONFailure sera appelé (dans le thread UI)
    en cas de réussite, onGSONResult sera appelé (toujours dans le thread UI) avec l'objet SearchResponse.
    Par contre, l'ensemble de code sera fait dans un thread à part.

    L'idéal étant de stocker la tache "localement", histoire de pouvoir la canceller sur un onDestroy()


    Attention, n'ayant pas de Eclipse sous la main, code certainement à débuguer
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 131
    Points : 37
    Points
    37
    Par défaut
    bon bah j ai déboguer la plupart des trucs mais j ai encore une erreur la dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private OnGSONObjectResult<T> callback;
    ici sur OnGSONObjectResult

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       public GSONTask<T>(Class<T> cl, OnGSONObjectResult<T> cb)
       {
           this.gsonClass = cl;
           this.callback= cb;
       }
    la sur la variable cb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
       protected void onPostExecute(T result) {
           if (this.callback != null) {
               if (this.error != null)
                   this.callback.onGSONFailure(this.error);
               else
                   this.callback.onGSONResult(result);
           }
       }
    et ici sur callback


    et egalement dans l activity
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GSONTask<SearchResponse> task = new GSONTask<SearchResponse>(SearchResponse.class,this);
    probleme sur le new GSONTask<SearchResponse>(SearchResponse.class,this);

    je vois pas trop comment fixer ces trucs la.

    merci

  12. #12
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Des problèmes de compilation ?

    J'ai édité mon post initial d'ailleurs avec 1 ou 2 corrections... (il restait des références à GSONObjectTask ... etc...)


    Que dit eclipse ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 131
    Points : 37
    Points
    37
    Par défaut
    Re merci pour ton aide alors, j ai changer comme tu as dis je n ai plus d erreur seulement :

    j ai un warning Error while retrieving JSON donc j ai mis apres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       Reader reader = new InputStreamReader(entityStream  ,(CharsetDecoder) entity.getContentEncoding());
               ret = (T) gson.fromJson(reader, this.gsonClass);
    ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("Connecting to service URL : "+entityStream);

    sauf que la console n affiche rien

    et dans le main Activity j ai enlever la fonction retrieveStream et mis ceci

    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
     
    	public void handleClick(View v) {
    	    // TODO Auto-generated method stub
    	    Toast.makeText(this, "Hello", Toast.LENGTH_SHORT).show();
    	    GSONTask<SearchResponse> task = new GSONTask<SearchResponse>(SearchResponse.class,this);
    		task.execute(new HttpGet(url));
    	}
     
    	public void onGSONResult(SearchResponse res) {
    	    Toast.makeText(this, res.query, Toast.LENGTH_SHORT).show();
     
    	    List<Result> results = res.results;
     
    	    for (Result result : results) {
    	            Toast.makeText(this, result.fromUser, Toast.LENGTH_SHORT).show();
    	    }
    	}
    j arrive bien a alert le hello mais pas le json

    voila merci

  14. #14
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Le warning il arrive pas tout seul, il arrive avec une stacktrace, c'est ça qui intéressant....

    Et donc la fonction onGSONFailure() a du être appelée....

    Mais bon... dans un premier temps, le warning a du afficher l'erreur complète et la ligne ou l'erreur s'est produite....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 131
    Points : 37
    Points
    37
    Par défaut
    Alors j ai bien verifier dans logcat il n y a aucune erreur juste un warning

    GSONTask Error while retrieving JSON By PID 531 log level warn

    j ai exporter le log j ai ca

    10-23 12:11:30.175: W/GSONTask(531): Error while retrieving JSON


    voila tout ce que j'ai :/

  16. #16
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Non mais c'est impossible... tous les "Log.w" qu'on fait viennent avec une exception...
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    10-23 12:29:11.695: W/GSONTask(637): Error while retrieving JSON
    10-23 12:29:11.695: W/GSONTask(637): java.lang.NullPointerException
    10-23 12:29:11.695: W/GSONTask(637): 	at java.io.InputStreamReader.<init>(InputStreamReader.java:81)
    10-23 12:29:11.695: W/GSONTask(637): 	at com.anyxis.android.utils.JSONTask.doInBackground(JSONTask.java:80)
    10-23 12:29:11.695: W/GSONTask(637): 	at com.anyxis.android.utils.JSONTask.doInBackground(JSONTask.java:1)
    10-23 12:29:11.695: W/GSONTask(637): 	at android.os.AsyncTask$2.call(AsyncTask.java:264)
    10-23 12:29:11.695: W/GSONTask(637): 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    10-23 12:29:11.695: W/GSONTask(637): 	at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    10-23 12:29:11.695: W/GSONTask(637): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    10-23 12:29:11.695: W/GSONTask(637): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    10-23 12:29:11.695: W/GSONTask(637): 	at java.lang.Thread.run(Thread.java:856)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 131
    Points : 37
    Points
    37
    Par défaut
    Hum bah je comprends pas, si tu me crois pas je peux te faire un screenshot de logcat tu verras je n'ai que ça :/

  18. #18
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    oui je veux bien

    j'ai rajouté 2/3 bouts de code dans la fonction pour éviter les NullPointerException justement....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 131
    Points : 37
    Points
    37
    Par défaut



    Edit : Je viens de changer la le gsontask comme tu as fait mais ça me fait la meme juste un Error while retrieving JSON, apparemment il ne rentre pas dans le try


    voila

  20. #20
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Ben si puisqu'il fait le log
    (et il doit appeler ton onGSONFailure() par la suite)
    Colle un Toast dans le onGSONFailure() d'ailleurs....

    Mais il y a un soucis avec ton logcat... il *DOIT* y avoir une exception avec le warning, et donc une stacktrace...

    Essayes de virer le filtre du logcat on sait jamais....

    Edit: je viens de faire les tests chez moi, et ou que soit l'exception la stack est bien dans le logcat... no way...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. [AJAX] Crée dynamiquement des données JSON
    Par geforce dans le forum AJAX
    Réponses: 3
    Dernier message: 20/04/2010, 16h30
  2. [Dojo] Passage de données JSON avec xhrGet ou xhrPost
    Par Tavarez59 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 29/10/2009, 17h58
  3. Réponses: 2
    Dernier message: 19/06/2009, 14h21
  4. parser un json
    Par Henry9 dans le forum jQuery
    Réponses: 4
    Dernier message: 18/05/2009, 21h13
  5. [AJAX]Récupération de données json (ajax)
    Par amarcil dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 31/10/2008, 19h47

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