2010-06-24 7 views
1

Je suis relativement nouveau à Java et Android développement si désolé si c'est une question idiote. Je construis une application simple, simplement pour apprendre les cordes Android, qui affichera une liste des photos les plus récentes téléchargées sur Flickr. L'application est construite mais elle se désactive quand elle essaie de désérialiser le json que je reçois de Flickr. Voici mon erreur:GSON et les problèmes de l'API Flickr: JsonParseException lors de la désérialisation de json

06-23 21:11:25.560: WARN/System.err(298): com.google.gson.JsonParseException: The JsonDeserializer [email protected]68 failed to deserialized json object {"page":1,"pages":100,"perpage":10,"total":1000,"photo":[{"id":"4728507833","owner":"[email protected]","secret":"496b96968d","server":"1407","farm":2,"title":"DSCN2733","ispublic":1,"isfriend":0,"isfamily":0,"url_sq":"http://farm2.static.flickr.com/1407/4728507833_496b96968d_s.jpg","height_sq":75,"width_sq":75},{"id":"4728507883","owner":"[email protected]","secret":"ab80a5bdf4","server":"1194","farm":2,"title":"Sultan","ispublic":1,"isfriend":0,"isfamily":0,"url_sq":"http://farm2.static.flickr.com/1194/4728507883_ab80a5bdf4_s.jpg","height_sq":75,"width_sq":75},{"id":"4728507955","owner":"[email protected]","secret":"7d6ea1cd08","server":"1377","farm":2,"title":"DSC04455","ispublic":1,"isfriend":0,"isfamily":0,"url_sq":"http://farm2.static.flickr.com/1377/4728507955_7d6ea1cd08_s.jpg","height_sq":75,"width_sq":75},{"id":"4728507979","owner":"[email protected]","secret":"c76cfe4afb","server":"1162","farm":2,"title":"IMGP1429","ispublic":1,"isfriend":0,"isfamily":0,"url_sq":"http://farm2.static.flickr.com/1162/4728507979_c76cfe4afb_s.jpg","height_sq":75,"width_sq":75},{"id":"4728508009","owner":"[email protected]","secret":"76b858efe7","server":"1366","farm":2,"title":"DSC_2459.JPG","ispublic":1,"isfriend":0,"isfamily":0,"url_sq":"http://farm2.static.flickr.com/1366/4728508009_76b858efe7_s.jpg","height_sq":75,"width_sq":75},{"id":"4729153856","owner":"[email protected]","secret":"843d4f56ec","server":"1129","farm":2,"title":"IMG_1585","ispublic":1,"isfriend":0,"isfamily":0,"url_sq":"http://farm2.static.flickr.com/1129/4729153856_843d4f56ec_s.jpg","height_sq":75,"width_sq":75},{"id":"4729153942","owner":"[email protected]","secret":"f7ea2d3037","server":"1257","farm":2,"title":"IMG_1126","ispublic":1,"isfriend":0,"isfamily":0,"url_sq":"http://farm2.static.flickr.com/1257/4729153942_f7ea2d3037_s.jpg","height_sq":75,"width_sq":75},{"id":"4729153952","owner":"[email protected]","secret":"af6d937dcd","server":"1129","farm":2,"title":"069_69","ispublic":1,"isfriend":0,"isfamily":0,"url_sq":"http://farm2.static.flickr.com/1129/4729153952_af6d937dcd_s.jpg","height_sq":75,"width_sq":75},{"id":"4729153962","owner":"[email protected]","secret":"71f6c321eb","server":"1014","farm":2,"title":"Snapshot_010","ispublic":1,"isfriend":0,"isfamily":0,"url_sq":"http://farm2.static.flickr.com/1014/4729153962_71f6c321eb_s.jpg","height_sq":75,"width_sq":75},{"id":"4729153964","owner":"[email protected]","secret":"6ab627b565","server":"1364","farm":2,"title":"DSC_0679","ispublic":1,"isfriend":0,"isfamily":0,"url_sq":"http://farm2.static.flickr.com/1364/4729153964_6ab627b565_s.jpg","height_sq":75,"width_sq":75}]} given the type [email protected] 
06-23 21:11:25.580: WARN/System.err(298):  at com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:63) 
06-23 21:11:25.580: WARN/System.err(298):  at com.google.gson.JsonDeserializationVisitor.invokeCustomDeserializer(JsonDeserializationVisitor.java:88) 
06-23 21:11:25.600: WARN/System.err(298):  at com.google.gson.JsonObjectDeserializationVisitor.visitFieldUsingCustomHandler(JsonObjectDeserializationVisitor.java:117) 
06-23 21:11:25.600: WARN/System.err(298):  at com.google.gson.ObjectNavigator.navigateClassFields(ObjectNavigator.java:150) 
06-23 21:11:25.610: WARN/System.err(298):  at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:123) 
... 
06-23 21:11:25.851: WARN/System.err(298): Caused by: java.lang.IllegalStateException: This is not a JSON Array. 
06-23 21:11:25.901: WARN/System.err(298):  at com.google.gson.JsonElement.getAsJsonArray(JsonElement.java:100) 
06-23 21:11:25.911: WARN/System.err(298):  at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.deserialize(DefaultTypeAdapters.java:468) 
06-23 21:11:25.921: WARN/System.err(298):  at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.deserialize(DefaultTypeAdapters.java:435) 
06-23 21:11:25.921: WARN/System.err(298):  at com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:50) 
06-23 21:11:25.931: WARN/System.err(298):  ... 26 more 

De l'erreur je suppose qu'il a quelque chose GSON n'aime pas le JSON qui est retourné, mais je ne sais pas assez sur la façon dont java convertit des objets et d'autres types de variables pendant toute l'opération.

Je ne sais pas si vous en aurez besoin, mais voici une partie du code du projet:

String response = client.getResponse(); 
response = response.replace("jsonFlickrApi(", ""); 
response = response.substring(0,response.length()-2); 
Gson gson = new Gson(); 

FlickrPhotos flickrphotos = new FlickrPhotos(); 
try { 
    flickrphotos = gson.fromJson(response, FlickrPhotos.class); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 

Voici FlickrPhotos:

public class FlickrPhotos { 
    private String page, pages, perpage, total; 
    private List<FlickrPhoto> photos; 

    public List<FlickrPhoto> getPhotos() { 
     return photos; 
    } 
    // More getters 
} 

Voici FlickrPhoto:

public class FlickrPhoto { 
    private String id, owner, secret, server, title, width_sq, url_sq; 
    // getters 
} 

Des idées? Merci beaucoup pour votre temps et probablement la patience ... (Si je noobing ça!)

Répondre

2

Une chose qui était à moi simplement en regardant c'était photo vs photos différence:

... "total":1000,"photo":[{ ... 

vs

private List<FlickrPhoto> photos; 

public List<FlickrPhoto> getPhotos() { 
    return photos; 
} 

Si vous ne l'avez pas déjà, peut-être essayer de renommer votre List juste photo à la place?

De plus, beaucoup des propriétés (page, pages, perpage, width_sq etc) ne sont pas String s dans le JSON. Je pense qu'il existe un convertisseur de type automatique qui traite de cela, mais vous pourriez aussi bien les déclarer comme int s.

+0

Y a-t-il un insigne de casquette? J'étais inquiet que c'était un problème stupide. Maintenant je pars pour résoudre les erreurs qui surviennent après celle-là. Soupir. – mattmcmanus

+0

Je pense que le message d'erreur aurait pu être un peu plus informatif .. ne vous blâmez pas trop dur –