改造初学者关于POJO' s

时间:2016-03-02 15:27:55

标签: android retrofit retrofit2

今天,我尝试使用改装库而不是排球 我的问题是我在回复中得到了这个结果。

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

我正在尝试解析Google响应,它会返回该错误。

我的Pojo就是这个。

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;
}  

我的界面就是这个。

 public interface GoogleCLient {

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

我的设置和获取响应的代码是这样的。

  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());
        }
    });  

我已经在我的其他课程中创建了Servicegenerator,所以我可以随时调用它,只需将URL作为参数。
我的第一次尝试是工作(不同的URL tho) 但是,当涉及Google地方信息搜索时, 我的代码无效。
在哪里我犯了错误,我该怎么做?

2 个答案:

答案 0 :(得分:0)

Google API为您提供的JSON响应是什么?我的猜测是你的POJO是错的,你应该期望一个对象包含一个对象列表而不是一个对象列表

更新: 你确实有一个包含更多对象的复杂对象。使用Json到Java POJO在线工具,例如http://pojo.sodhanalibrary.com/,你得到一个这样的对象:

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+"]";
}
}

请注意,您还需要定义一些对象。请参阅上面的链接以获取完整列表

答案 1 :(得分:0)

考虑到您正在使用this API,您将获得包含结果数组的对象:

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

为此定义一个POJO:

public class SearchResult {
    List<googleMap> results;

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

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

并通过您的电话

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