【已解决】 Expected BEGIN_OBJECT but was BEGIN_ARRAY
请求数据报错
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 30 path $.data
下面是报错的地方和domain
第一次遇到不知道怎么办才好了,网上说是转换数据格式,但是不知道从哪个地方转换数据格式,不太懂
自己跟着大锯的领券联盟写的,可能会有没注意到的地方
希望得到解答
CategoryPagerPresenterImpl.java
@Override
public void getContentByCategory(String categoryTitle) {
//根据分类加载内容
Retrofit retrofit = RetrofitManager.getInstance().getRetrofit();
Api api = retrofit.create(Api.class);
Integer targetPage = pageInfo.get(categoryTitle);
if (targetPage == null) {
targetPage = DEFAULT_PAGE;
pageInfo.put(categoryTitle, targetPage);
}
String shopPagerUrl = UrlUtils.createShopPagerUrl(categoryTitle);
LogUtils.d(CategoryPagerPresenterImpl.this, "shop pager url --> " + shopPagerUrl);
//获取数据
Call<Commodities> task = api.getCommoditiesByCategory(shopPagerUrl);
task.enqueue(new Callback<Commodities>() {
@Override
public void onResponse(Call<Commodities> call, Response<Commodities> response) {
int code = response.code();
LogUtils.d(CategoryPagerPresenterImpl.this, "code --> " + code);
if (code == HttpURLConnection.HTTP_OK) {
Commodities commodities = response.body();
LogUtils.d(CategoryPagerPresenterImpl.this, "commodities --> " + commodities.toString());
} else {
//TODO
}
}
@Override
public void onFailure(Call<Commodities> call, Throwable t) {
LogUtils.d(CategoryPagerPresenterImpl.this, "onFailure --> " + t.toString());
}
});
}
Commodities.java
public class Commodities {
/**
* code : 0
* msg : 成功
* data : {"comId":"016d1598-c613-44e1-99bd-37aa11afec46","comName":"薯条","comCategory":"农场商品","comSite":"厂家直发","comPrice":32.5,"comSpec":null,"comStock":10000,"paidNum":0,"isRecommend":1,"comDescription":"2千克/袋,原料优质,自然原味,推荐油炸食用","comEvaluation":null,"createTime":"2022-03-08","updateTime":"2022-03-08"}
*/
private int code;
private String msg;
private DataBean data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
@Override
public String toString() {
return "Commodities{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
public static class DataBean {
/**
* comId : 016d1598-c613-44e1-99bd-37aa11afec46
* comName : 薯条
* comCategory : 农场商品
* comSite : 厂家直发
* comPrice : 32.5
* comSpec : null
* comStock : 10000
* paidNum : 0
* isRecommend : 1
* comDescription : 2千克/袋,原料优质,自然原味,推荐油炸食用
* comEvaluation : null
* createTime : 2022-03-08
* updateTime : 2022-03-08
*/
private String comId;
private String comName;
private String comCategory;
private String comSite;
private double comPrice;
private Object comSpec;
private int comStock;
private int paidNum;
private int isRecommend;
private String comDescription;
private Object comEvaluation;
private String comPreview;
private String createTime;
private String updateTime;
private List<String> comIconList;
public String getComId() {
return comId;
}
public void setComId(String comId) {
this.comId = comId;
}
public String getComName() {
return comName;
}
public void setComName(String comName) {
this.comName = comName;
}
public String getComCategory() {
return comCategory;
}
public void setComCategory(String comCategory) {
this.comCategory = comCategory;
}
public String getComSite() {
return comSite;
}
public void setComSite(String comSite) {
this.comSite = comSite;
}
public double getComPrice() {
return comPrice;
}
public void setComPrice(double comPrice) {
this.comPrice = comPrice;
}
public Object getComSpec() {
return comSpec;
}
public void setComSpec(Object comSpec) {
this.comSpec = comSpec;
}
public int getComStock() {
return comStock;
}
public void setComStock(int comStock) {
this.comStock = comStock;
}
public int getPaidNum() {
return paidNum;
}
public void setPaidNum(int paidNum) {
this.paidNum = paidNum;
}
public int getIsRecommend() {
return isRecommend;
}
public void setIsRecommend(int isRecommend) {
this.isRecommend = isRecommend;
}
public String getComDescription() {
return comDescription;
}
public void setComDescription(String comDescription) {
this.comDescription = comDescription;
}
public Object getComEvaluation() {
return comEvaluation;
}
public void setComEvaluation(Object comEvaluation) {
this.comEvaluation = comEvaluation;
}
public String getComPreview() {
return comPreview;
}
public void setComPreview(String comPreview) {
this.comPreview = comPreview;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public List<String> getComIconList() {
return comIconList;
}
public void setComIconList(List<String> comIconList) {
this.comIconList = comIconList;
}
@Override
public String toString() {
return "DataBean{" +
"comId='" + comId + '\'' +
", comName='" + comName + '\'' +
", comCategory='" + comCategory + '\'' +
", comSite='" + comSite + '\'' +
", comPrice=" + comPrice +
'}';
}
}
}
简单一步是在postman先把请求走一遍 获取到结果值后在as上直接用插件转化对象 这样就不会有数据错误了 一般来说可能对象bean的data对象 是list的形式存在 而你现在是bean形式 可能是这个问题
翻译过来就是要的是一个对象,但出来的是一个集合
>,服务器端返回来的数据不止一个