2016-03-02 1 views
2

Aujourd'hui, j'ai essayé d'utiliser la bibliothèque de retrofit au lieu de volley.
Mon problème est que j'obtiens ce résultat dans ma réponse.Retrofit Beginner À propos de POJO

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 

J'essaie d'analyser la réponse de Google et elle me renvoie cette erreur.

Mon Pojo est ceci.

public static class googleMap{ 
    String icon; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getIcon() { 
     return icon; 
    } 

    public void setIcon(String icon) { 
     this.icon = icon; 
    } 

    String id; 
} 

pour mon interface est-ce.

public interface GoogleCLient { 

    @GET("json?location=-33.8670522,151.1957362&radius=500&type=restaurant&name=cruise&key=AIzaSyBe7DiT-2GeoUiFEUJkP-TL4JBR2yFoLu4") 
    Call<List<googleMap>> loadMaps(); 
} 

Et pour mon code pour définir et obtenir la réponse est ceci.

String URL2 = "https://maps.googleapis.com/maps/api/place/nearbysearch"; 
    GitHubClient client = ServiceGenerator.createService(GitHubClient.class, URL2); 
    Call<List<googleMap>> call2 = client.loadMaps(); 
    call2.enqueue(new Callback<List<googleMap>>() { 
     @Override 
     public void onResponse(Call<List<googleMap>> call, retrofit2.Response<List<googleMap>> response) { 
      Log.e("Res:", response.body().size()); 
     } 

     @Override 
     public void onFailure(Call<List<googleMap>> call, Throwable t) { 
      Log.e("Err:", t.toString()); 
     } 
    }); 

J'ai fait le Servicegenerator dans mon autre classe donc je peux l'appeler à tout moment et il suffit de mettre l'URL en tant que paramètre.
Mon premier essai fonctionne (URL différente tho).
Mais quand il s'agit de la recherche Google Adresses,
Mon code ne fonctionne pas.
Où j'ai fait une erreur et comment puis-je faire les choses correctement?

Répondre

0

Considérant que vous utilisez l'API this, vous obtenez de nouveau un objet avec votre tableau de résultats dans ce:

{ 
    "html_attributions" : [], 
    "results" : [ 
     ... 
    ], 
    "status" : "OK" 
} 

définissent donc un POJO pour elle:

public class SearchResult { 
    List<googleMap> results; 

    public void setResults(List<googleMap> results) { 
     this.results = results; 
    } 

    public List<googleMap> getResults() { 
     return results; 
    } 
} 

et retourner ce lieu avec votre appel

public interface GoogleCLient { 
    @GET("json?location=-33.8670522,151.1957362&radius=500&type=restaurant&name=cruise&key=AIzaSyBe7DiT-2GeoUiFEUJkP-TL4JBR2yFoLu4") 
    Call<SearchResult> loadMaps(); 
} 
+0

donc ce SearchResult() est un autre Pojo? –

+0

@CharlesGalvez oui c'est. Le vôtre est incomplet. Vous devez avoir un objet pour la racine, pas un tableau. – tynn

+0

Je reçois toujours cette erreur après avoir ajouté le pojo. Attendu BEGIN_ARRAY mais était BEGIN_OBJECT à la ligne 1 colonne 2 chemin $ –

0

Quelle est la réponse JSON que l'API Google vous fournit? Je suppose que votre POJO est faux et que vous devriez attendre un objet contenant une liste d'objets plutôt qu'une liste d'objets

Mise à jour: Vous avez en effet un objet complexe contenant plus d'objets. L'utilisation d'un JSON pour Java POJO outil en ligne tels que http://pojo.sodhanalibrary.com/, vous obtiendrez un objet comme celui-ci:

public class GoogleMapsResponse { 
private Results[] results; 

private String[] html_attributions; 

private String status; 

public Results[] getResults() 
{ 
    return results; 
} 

public void setResults (Results[] results) 
{ 
    this.results = results; 
} 

public String[] getHtml_attributions() 
{ 
    return html_attributions; 
} 

public void setHtml_attributions (String[] html_attributions) 
{ 
    this.html_attributions = html_attributions; 
} 

public String getStatus() 
{ 
    return status; 
} 

public void setStatus (String status) 
{ 
    this.status = status; 
} 

@Override 
public String toString() 
{ 
    return "ClassPojo [results = "+results+", html_attributions = "+html_attributions+", status = "+status+"]"; 
} 
} 

Notez que vous auriez un peu plus d'objets que vous auriez besoin de définir. Voir le lien ci-dessus pour une liste complète

+0

https://maps.googleapis.com/maps/api/place/ nearbysearch/json? location = -33.8670522,151.1957362 & rayon = 500 & type = restaurant & nom = croisière & clé = AIzaSyBe7DiT-2GeoUiFEUJkP-TL4JBR2yFoLu4 ce lien. fourni avec ma clé. –