2017-10-10 56 views
0

我有一个JSON响应,看起来像这样:目标JSON响应

{\ “场馆\”:[{\ “ID \”:1,\ “照片\”:\ “https://s3.us-east-2.amazonaws.com”} ,....

它有一个关键的“场地”,然后是一个对象数组。在改造回应:

 public void onResponse(Call<List<Venue>> call, Response<List<Venue>> response) { 
      venues = response.body(); 
      venueAdapter.notifyDataSetChanged(); 
     } 

它失败:

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 

问题是我不知道如何告诉改造目标集合的“场地”的关键点。我怎样才能做到这一点?我不想因为这个JSON响应而创建另一个类场所。

回答

1

在您的代码中尝试这样。

ResponseVenue类代码中的

public class ResponseVenue { 

private List<VenuesBean> venues; 

public List<VenuesBean> getVenues() { 
    return venues; 
} 

public void setVenues(List<VenuesBean> venues) { 
    this.venues = venues; 
} 

public static class VenuesBean { 
    /** 
    * id : 1 
    * photo : https: //s3.us-east-2.amazonaws.com 
    */ 

    private int id; 
    private String photo; 

    public int getId() { 
     return id; 
    } 

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

    public String getPhoto() { 
     return photo; 
    } 

    public void setPhoto(String photo) { 
     this.photo = photo; 
    } 
} 
} 

然后使用。

public void onResponse(Call<ResponseVenue> call, Response<ResponseVenue> response) { 
    venues = response.body(); 
    venueAdapter.notifyDataSetChanged(); 
} 
0

Post Venue pojo class。 我认为你pojo与回应json不匹配。

0

你的改型响应被设置为这个JSON输出:

[{\ “ID \”:1,\ “照片\”:\ “https://s3.us-east-2.amazonaws.com”},....]

它直接将对象映射到List。如果你只有单个数组,那么你可以像这样改变你的json响应,但是如果你在这个json响应中有另一个键值对,那么你应该尝试@KeLiuyue答案。创建一个VenueResponse pojo类,它包含一个List字段来容纳您的Venue Pojo类。
在此之后检索您的地点POJO的是这样的:

public void onResponse(Call<ResponseVenue> call, Response<ResponseVenue> response) { 
    venues = response.body().getVenues(); 
    venueAdapter.notifyDataSetChanged(); 
} 
0

只需更换

onResponse(Call<List<Venue>> call, Response<List<Venue>> response) 

onResponse(Call<Venue> call, Response<Venue> response) 

,并在API接口改造的列表中移除,并唯一场所