Retrofit Beginner 关于 POJO 的

Retrofit Beginner About POJO's

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

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

我正在尝试解析 Google 响应,结果 returns 我发现了那个错误。

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

我在另一个 class 中制作了 Servicegenerator,所以我可以随时调用它,只需将 URL 作为参数。
我的第一次尝试成功了(不同 URL)。
但是当涉及到 Google 地点搜索时,
我的代码无效。
我在哪里犯了错误,我该如何改正?

JSON Google API 给你的回应是什么?我的猜测是你的 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+"]";
}
}

请注意,您需要定义更多的对象。有关完整列表,请参阅上面的 link

考虑到您正在使用 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;
    }
}

和return这与您的通话有关

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