2017-10-10 93 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接口改造的列表中移除,並唯一場所