À l'aide de Rénovation pour accéder aux tableaux JSON
J'ai pensé que j'ai compris comment faire, mais de toute évidence pas. J'ai mon API de Flickr, qui commence comme ceci:
jsonFlickrApi({
"photos":{
"page":1,
"pages":10,
"perpage":100,
"total":1000,
"photo":[
{
"id":"12567883725",
"owner":"74574845@N05",
"secret":"a7431762dd",
"server":"7458",
"farm":8,
"title":"",
"ispublic":1,
"isfriend":0,
"isfamily":0,
"url_l":"http:\/\/farm8.staticflickr.com\/7458\/12567883725_a7431762dd_b.jpg",
"height_l":"683",
"width_l":"1024"
}
Maintenant les informations dont j'ai besoin pour obtenir de l'est de l'intérieur de la photo de tableau, donc ce que j'ai essayé de le faire est:
interface ArtService {
@GET("/services/rest/?method=flickr.photos.getRecent&extras=url_l&owner_name&format=json")
PhotosResponse getPhotos();
public class PhotosResponse {
Photos photos;
}
public class Photos {
List<Arraz> photo;
}
public class Arraz {
int id;
String title;
String owner;
String url_l;
}
}
Très clair que j'ai l'impression d'être à côté de la question, mais je ne suis pas sûr de savoir comment obtenir l'information..
- Avez-vous le comprendre à la fin?
Vous devez vous connecter pour publier un commentaire.
Un rapide coup d'oeil à la Rénovation de docs, dit-il utilise Gson à convertir en JSON pour les classes Java. Cela signifie que vous avez besoin d'une hiérarchie de classes en Java qui correspond au format JSON. Le vôtre ... qui ne fonctionne pas.
Le retour JSON est un objet avec un seul champ "photos" qui contient un objet;
Donc, votre classe de haut niveau serait une classe Java avec un seul champ:
Et que
Photos
type serait une autre classe qui correspond au format JSON pour l'objet, champ contient:Donc, si vous voulez avoir:
Et ensuite vous devez créer un
Photo
classe pour correspondre à la structure de l'objet dans l'intérieur de la matrice. Gson sera alors la carte du JSON retourné de façon appropriée.Je conseille http://www.jsonschema2pojo.org. Vous pouvez coller vos JSON et il va générer le Pojo pour vous.
Cela devrait faire l'affaire.
Accepté la réponse est correcte, mais il requiert la construction d'une Photoréponse classe qui n'a qu'un seul objet en elle. Ce la solution suivante, nous avons seulement besoin de créer les Photos de classe et certains de stérilisation.
Nous créer un JsonDeserializer:
Maintenant nous allons créer notre coutume gson objet de la Rénovation du RestAdapter:
Et puis nous avons mis le convertisseur dans la rénovation de l'adaptateur:
Et l'interface ressemble à ceci:
De cette façon nous obtenons les Photos de l'objet sans avoir à créer PhotosResponse classe. Nous pouvons l'utiliser comme ceci:
Vous devriez être en mesure d'accéder directement au com.google.gson.JsonObject de Rénovation, et d'accès quel que soit le domaine que vous souhaitez.
Donc, si vous êtes uniquement intéressé par la Photo de la matrice de quelque chose comme cela devrait fonctionner:
Et en fait, quand vous appelez le service il suffit d'exécuter le JsonObject pour obtenir ce que vous voulez:
Bien entendu, tous les sanity check sont laissés à vous.
Que déjà quelques réponses sont au-dessus de laquelle vous pouvez utiliser. Mais selon mon point de vue, l'utilisation de ce.
Faire une photo de classe avec toutes les variables donné dans les photos de l'objet et de créer des accesseurs compositeur de tous et aussi de créer une classe de photo avec la volonté de tenir la liste des photos, et aussi créer des accesseurs poseur de cette liste de côté les Photos de classe. Ci-dessous est le code donné.