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 :

Problème parsing JSON avec Jackson


Sujet :

Android

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    Points : 13
    Points
    13
    Par défaut Problème parsing JSON avec Jackson
    Bonjour,

    J'ai suivi ce tutoriel pour faire le parsing JSON => http://nbenbourahla.developpez.com/t...ckson-android/

    Mais j'ai un problème, je ne comprend pas pourquoi mais si je rajoute certains champs à mon fichier json, cela fait planter mon application.

    Je m'explique, si mon fichier JSON est de cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"Members":[{"nom":"Toto albert","role":"Pr\u00e9sident","tel":"0600000000","mail":"toto@toto.fr","description":"salut"}]}
    Tout ce passe bien, mais si je rajoute un champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"Members":[{"nom":"Toto albert","role":"Pr\u00e9sident","tel":"0600000000","mail":"toto@toto.fr","description":"salut","img_path":"toto.png"}]}
    Mon application plante, alors que je n'ai pas changer le code entre temps.

    Voici le code d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    03-04 09:20:28.723: E/AndroidRuntime(330): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bde.ismin/com.bde.ismin.StaffActivity}: java.lang.NullPointerException
    L'erreur apparaît lors de l'appel à la fonction "findall"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public ArrayList<Member> findAll() {
    	return memberList;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void init(String url_str) {
    	downloadJsonFile(url_str);
    	try {
    	    jp = jsonFactory.createJsonParser(jsonFile);
    	    events = objectMapper.readValue(jp, Members.class);
    	    memberList = events.get("Members");
    	} catch (JsonParseException e) {
    	    e.printStackTrace();
    	} catch (IOException e) {
    	    e.printStackTrace();
    	}
        }
    Voici enfin le parsing dans mon application
    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
    		ArrayList<HashMap<String, String>> StaffList = new ArrayList<HashMap<String, String>>();
     
    		staffController = new StaffController();
    		staffController.init(BDEISMINActivity.DL_URL_STAFF);
     
    		for (Member u : staffController.findAll()) {
    			HashMap<String, String> map = new HashMap<String, String>();
    			//map.put(BDEISMINActivity.KEY_ID, "1");//u.getName());
    		    map.put(BDEISMINActivity.KEY_TITLE,u.getNom());// u.getTime());
    		    map.put(BDEISMINActivity.KEY_MORE, u.getRole());//u.getPlace());
    		    map.put(BDEISMINActivity.KEY_RIGHTEND, u.getTel());//u.getName());
    		    map.put(BDEISMINActivity.KEY_THUMB_URL, BDEISMINActivity.URL_PHOTO_PATH_STAFF + "toto.png");
    		    StaffList.add(map);
    		}
     
    		list_staff=(ListView)findViewById(R.id.list_staff);
     
            adapter= new LazyAdapter(this, StaffList);   
     
            list_staff.setAdapter(adapter);
    Voici ma classe "Member"
    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
    public class Member {
        private String nom;
        private String role;
        private String tel;
        private String mail;
        private String description;
        private String img_path;
        private String room;
     
        public Member() {
    	super();
    	this.nom = "";
    	this.role = "";
    	this.tel = "";
    	this.mail = "";
    	this.description = "";
    	this.img_path = "";
    	this.room = "";
        }
     
        public Member(String Nom, String Role, String Tel, String Mail,
    	    String Description, String Img_Path, String Room) {
    	super();
    	this.nom = Nom;
    	this.role = Role;
    	this.tel = Tel;
    	this.mail = Mail;
    	this.description = Description;
    	this.img_path = Img_Path;
    	this.room = Room;
        }
    [...]
    Le but est que j'ai plusieurs membres avec chacun ça photo, du coup j'aimerai pouvoir la récupérer via JSON..

    Voilà merci de votre aide, j'espère ne rien avoir oublié...

    Bye
    Ludo

  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
    Si tu pouvais nous mettre toute les stacktrace du NPE... ca aiderait !
    Personnellement j'utilise le parser JSON par défaut (new JSONObject(...) etc...)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Et voilà

    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
    03-05 22:59:24.573: D/dalvikvm(362): GC_EXTERNAL_ALLOC freed 81K, 52% free 2621K/5379K, external 2136K/2137K, paused 74ms
    03-05 22:59:25.583: W/System.err(362): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "img_path" (Class com.bde.ismin.model.Member), not marked as ignorable
    03-05 22:59:25.593: W/System.err(362):  at [Source: /mnt/sdcard/BDE-ISMIN/staff/staff.json; line: 1, column: 225] (through reference chain: com.bde.ismin.model.Member["img_path"])
    03-05 22:59:25.603: W/System.err(362): 	at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
    03-05 22:59:25.603: W/System.err(362): 	at org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:672)
    03-05 22:59:25.603: W/System.err(362): 	at org.codehaus.jackson.map.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:658)
    03-05 22:59:25.603: W/System.err(362): 	at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:1361)
    03-05 22:59:25.603: W/System.err(362): 	at org.codehaus.jackson.map.deser.BeanDeserializer._handleUnknown(BeanDeserializer.java:725)
    03-05 22:59:25.613: W/System.err(362): 	at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:703)
    03-05 22:59:25.613: W/System.err(362): 	at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    03-05 22:59:25.613: W/System.err(362): 	at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
    03-05 22:59:25.613: W/System.err(362): 	at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:194)
    03-05 22:59:25.613: W/System.err(362): 	at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
    03-05 22:59:25.613: W/System.err(362): 	at org.codehaus.jackson.map.deser.std.MapDeserializer._readAndBind(MapDeserializer.java:319)
    03-05 22:59:25.623: W/System.err(362): 	at org.codehaus.jackson.map.deser.std.MapDeserializer.deserialize(MapDeserializer.java:249)
    03-05 22:59:25.623: W/System.err(362): 	at org.codehaus.jackson.map.deser.std.MapDeserializer.deserialize(MapDeserializer.java:33)
    03-05 22:59:25.623: W/System.err(362): 	at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2704)
    03-05 22:59:25.623: W/System.err(362): 	at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1286)
    03-05 22:59:25.623: W/System.err(362): 	at com.bde.ismin.model.StaffController.init(StaffController.java:39)
    03-05 22:59:25.623: W/System.err(362): 	at com.bde.ismin.StaffActivity.onCreate(StaffActivity.java:33)
    03-05 22:59:25.623: W/System.err(362): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    03-05 22:59:25.623: W/System.err(362): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
    03-05 22:59:25.623: W/System.err(362): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
    03-05 22:59:25.633: W/System.err(362): 	at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    03-05 22:59:25.633: W/System.err(362): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
    03-05 22:59:25.633: W/System.err(362): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    03-05 22:59:25.633: W/System.err(362): 	at android.os.Looper.loop(Looper.java:123)
    03-05 22:59:25.633: W/System.err(362): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
    03-05 22:59:25.633: W/System.err(362): 	at java.lang.reflect.Method.invokeNative(Native Method)
    03-05 22:59:25.643: W/System.err(362): 	at java.lang.reflect.Method.invoke(Method.java:507)
    03-05 22:59:25.643: W/System.err(362): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    03-05 22:59:25.643: W/System.err(362): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    03-05 22:59:25.643: W/System.err(362): 	at dalvik.system.NativeStart.main(Native Method)
    03-05 22:59:25.653: D/AndroidRuntime(362): Shutting down VM
    03-05 22:59:25.653: W/dalvikvm(362): threadid=1: thread exiting with uncaught exception (group=0x40015560)
    03-05 22:59:25.694: E/AndroidRuntime(362): FATAL EXCEPTION: main
    03-05 22:59:25.694: E/AndroidRuntime(362): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bde.ismin/com.bde.ismin.StaffActivity}: java.lang.NullPointerException
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at android.os.Looper.loop(Looper.java:123)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at java.lang.reflect.Method.invokeNative(Native Method)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at java.lang.reflect.Method.invoke(Method.java:507)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at dalvik.system.NativeStart.main(Native Method)
    03-05 22:59:25.694: E/AndroidRuntime(362): Caused by: java.lang.NullPointerException
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at com.bde.ismin.StaffActivity.onCreate(StaffActivity.java:37)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
    03-05 22:59:25.694: E/AndroidRuntime(362): 	... 11 more

  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
    Ben voila:
    Unrecognized field "img_path" (Class com.bde.ismin.model.Member), not marked as ignorable
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Je ne comprend pas d'où ça vient, et comment je peux le résoudre par contre car j'aimerai bien utilisé ce qu'il y a dans ce champ =/


    Pour moi le champ "img_path" est bien défini (cf mon premier post)


    Je vais essayer de faire des recherches sur le net, Merci

  6. #6
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    03-05 22:59:25.694: E/AndroidRuntime(362): Caused by: java.lang.NullPointerException
    03-05 22:59:25.694: E/AndroidRuntime(362): 	at com.bde.ismin.StaffActivity.onCreate(StaffActivity.java:37)
    Je vais essayer de faire des recherches sur le net, Merci
    Avant de faire des recherches sur le net regarde un peu comment évolue ta variable en mode Debug .

    Tu as un pointeur Null sur cette variable, soit elle n'est pas initialisé , soit elle est remise à Null à un moment donnée, le debug te donnera cette informations, ou alors des logs...

    Qu'est ce que tu as à cette ligne StaffActivity.java:37
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    La ligne 37 est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (Member u : staffController.findAll()) {
    staffController.findAll() retourne m'a "memberList"

    Le problème se trouve dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    events = objectMapper.readValue(jp, Members.class);
    Car à la fin "events" est toujours à Null donc memberList sera à null aussi car j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memberList = events.get("Members");
    Avec le debugger, il y a ceci qui a retenu mon attention :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClassNotFoundException.<init>(String, Throwable) ligne : 59
    avec comme message : com.bde.ismin.model.Members

    Il ne charge pas ma classe Members c'est ça ?!

Discussions similaires

  1. Parsing JSON avec Jackson sous Android
    Par Feanorin dans le forum Android
    Réponses: 4
    Dernier message: 20/12/2012, 12h37
  2. Problème de JSON avec JSP
    Par cracker404 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 10/11/2011, 14h34
  3. Parcourir JSON avec Jackson
    Par moutey dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 13/10/2011, 16h39
  4. [JAXB] Problème parsing XML avec XSD validant
    Par vano dans le forum Persistance des données
    Réponses: 2
    Dernier message: 26/08/2008, 09h59

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