改装 - 预计BEGIN_ARRAY,但是BEGIN_OBJECT?
我得到一个json
结果从服务与改造像波纹管:改装 - 预计BEGIN_ARRAY,但是BEGIN_OBJECT?
{
"result": {
"totalCount": 15,
"resultCount": 2,
"offset": 0,
"limit": 2,
"products": [
{
"id": 10081,
"name": "prod",
"pictureUrl": "url",
"price": 1,
"url": "url",
"briefDescription": "test",
"description": "test",
"pictures": [],
"categoryTitle": "s s",
"categoryId": 53,
"extraInfo": {
"productProperties": [
{
"id": 88,
"value": "6",
"measurementUnit": "s",
"title": "s"
},
{
"id": 89,
"value": "2",
"measurementUnit": "s",
"title": "s s"
},
{
"id": 90,
"value": "2",
"measurementUnit": "s",
"title": "s s s s"
},
{
"id": 91,
"value": "",
"measurementUnit": "",
"title": "s s"
},
{
"id": 92,
"value": "",
"measurementUnit": "",
"title": "s s"
},
{
"id": 93,
"value": "",
"measurementUnit": "",
"title": "s"
},
{
"id": 94,
"value": "",
"measurementUnit": "",
"title": "s"
}
],
"published": false,
"preparationTime": 1,
"keywords": "",
"quantity": 0,
"status": 1
}
},
{
"id": 51,
"name": "nam3",
"pictureUrl": "url",
"price": 495000,
"url": "url",
"briefDescription": "sdsds",
"description": "-",
"pictures": [],
"categoryTitle": "x x x",
"categoryId": 179,
"extraInfo": {
"productProperties": [
{
"id": 67,
"value": "1000",
"measurementUnit": "x",
"title": "x x"
},
{
"id": 68,
"value": "1050",
"measurementUnit": "s",
"title": "x x x"
},
{
"id": 69,
"value": "",
"measurementUnit": "",
"title": "x x"
},
{
"id": 70,
"value": "",
"measurementUnit": "",
"title": "x x"
},
{
"id": 71,
"value": "",
"measurementUnit": "",
"title": "xxxx"
}
],
"published": true,
"preparationTime": 2,
"keywords": "Aswddfe",
"quantity": 93,
"status": 1
}
}
]
}
}
而且我越来越像波纹管与retrofit
:
RetrofitApi.getVendorAdminApi()
.getAdminProductss(userToken, limit, pageNumber, filters)
.enqueue(new Callback<List<ProductsModel>>() {
@Override
public void onResponse(Call<List<ProductsModel>> call, Response<List<ProductsModel>> response) {
if (response.isSuccessful()) {
resultListener.onSuccess(response.body());
} else {
resultListener.onFailure();
}
}
@Override
public void onFailure(Call<List<ProductsModel>> call, Throwable t) {
resultListener.onFailure();
t.printStackTrace();
}
});
但说我:
Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
而且波纹管是我的型号:
public class ProductsModel {
@SerializedName("result")
@Expose
private ResultProducts result;
public ResultProducts getResult() {
return result;
}
public void setResult(ResultProducts result) {
this.result = result;
}
}
你的问题是Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
所以更改
List<ProductsModel>
到ProductsModel
。
如果
JSON
是JSONArray
,您可以将其解析到List
(如List<ProductsModel>
)。如果
JSON
是JSONObject
,则可以将其解析为Object
(如ProductsModel
)。
更改为此。
@Override
public void onResponse(Call<ProductsModel> call, Response<ProductsModel> response) {
if (response.isSuccessful()) {
resultListener.onSuccess(response.body());
} else {
resultListener.onFailure();
}
}
而且
Call<ProductsModel> getAdminProductss();
你改造的呼叫更改为:
RetrofitApi.getVendorAdminApi()
.getAdminProductss(userToken, limit, pageNumber, filters)
.enqueue(new Callback<ProductsModel>() {
@Override
public void onResponse(Call<ProductsModel> call, Response<ProductsModel> response) {
if (response.isSuccessful()) {
resultListener.onSuccess(response.body());
} else {
resultListener.onFailure();
}
}
@Override
public void onFailure(Call<ProductsModel> call, Throwable t) {
resultListener.onFailure();
t.printStackTrace();
}
});
的原因是:如果你把List<ProductsModel>
它将检查JsonArray
但你的反应中它是未来JsonObject
,因此只是从List<ProductsModel>
改为ProductsModel
会这样解决你的问题。
希望它有帮助!
json数据中的“result”节点是一个不是数组的对象。该模型类JSON的将是如下
public class ResponseJSON
{
private Result result;
public Result getResult()
{
return result;
}
public void setResult (Result result)
{
this.result = result;
}
@Override
public String toString()
{
return "ClassPojo [result = "+result+"]";
}
}
public class Result
{
private String limit;
private String totalCount;
private String resultCount;
private String offset;
private Products[] products;
public String getLimit()
{
return limit;
}
public void setLimit (String limit)
{
this.limit = limit;
}
public String getTotalCount()
{
return totalCount;
}
public void setTotalCount (String totalCount)
{
this.totalCount = totalCount;
}
public String getResultCount()
{
return resultCount;
}
public void setResultCount (String resultCount)
{
this.resultCount = resultCount;
}
public String getOffset()
{
return offset;
}
public void setOffset (String offset)
{
this.offset = offset;
}
public Products[] getProducts()
{
return products;
}
public void setProducts (Products[] products)
{
this.products = products;
}
@Override
public String toString()
{
return "ClassPojo [limit = "+limit+", totalCount = "+totalCount+", resultCount = "+resultCount+", offset = "+offset+", products = "+products+"]";
}
}
public class ProductProperties
{
private String id;
private String title;
private String measurementUnit;
private String value;
public String getId()
{
return id;
}
public void setId (String id)
{
this.id = id;
}
public String getTitle()
{
return title;
}
public void setTitle (String title)
{
this.title = title;
}
public String getMeasurementUnit()
{
return measurementUnit;
}
public void setMeasurementUnit (String measurementUnit)
{
this.measurementUnit = measurementUnit;
}
public String getValue()
{
return value;
}
public void setValue (String value)
{
this.value = value;
}
@Override
public String toString()
{
return "ClassPojo [id = "+id+", title = "+title+", measurementUnit = "+measurementUnit+", value = "+value+"]";
}
}
public class Products
{
private String id;
private String price;
private String categoryTitle;
private String briefDescription;
private String pictureUrl;
private String description;
private String categoryId;
private String name;
private ExtraInfo extraInfo;
private String[] pictures;
private String url;
public String getId()
{
return id;
}
public void setId (String id)
{
this.id = id;
}
public String getPrice()
{
return price;
}
public void setPrice (String price)
{
this.price = price;
}
public String getCategoryTitle()
{
return categoryTitle;
}
public void setCategoryTitle (String categoryTitle)
{
this.categoryTitle = categoryTitle;
}
public String getBriefDescription()
{
return briefDescription;
}
public void setBriefDescription (String briefDescription)
{
this.briefDescription = briefDescription;
}
public String getPictureUrl()
{
return pictureUrl;
}
public void setPictureUrl (String pictureUrl)
{
this.pictureUrl = pictureUrl;
}
public String getDescription()
{
return description;
}
public void setDescription (String description)
{
this.description = description;
}
public String getCategoryId()
{
return categoryId;
}
public void setCategoryId (String categoryId)
{
this.categoryId = categoryId;
}
public String getName()
{
return name;
}
public void setName (String name)
{
this.name = name;
}
public ExtraInfo getExtraInfo()
{
return extraInfo;
}
public void setExtraInfo (ExtraInfo extraInfo)
{
this.extraInfo = extraInfo;
}
public String[] getPictures()
{
return pictures;
}
public void setPictures (String[] pictures)
{
this.pictures = pictures;
}
public String getUrl()
{
return url;
}
public void setUrl (String url)
{
this.url = url;
}
@Override
public String toString()
{
return "ClassPojo [id = "+id+", price = "+price+", categoryTitle = "+categoryTitle+", briefDescription = "+briefDescription+", pictureUrl = "+pictureUrl+", description = "+description+", categoryId = "+categoryId+", name = "+name+", extraInfo = "+extraInfo+", pictures = "+pictures+", url = "+url+"]";
}
}
public class ExtraInfo
{
private String keywords;
private ProductProperties[] productProperties;
private String preparationTime;
private String status;
private String quantity;
private String published;
public String getKeywords()
{
return keywords;
}
public void setKeywords (String keywords)
{
this.keywords = keywords;
}
public ProductProperties[] getProductProperties()
{
return productProperties;
}
public void setProductProperties (ProductProperties[] productProperties)
{
this.productProperties = productProperties;
}
public String getPreparationTime()
{
return preparationTime;
}
public void setPreparationTime (String preparationTime)
{
this.preparationTime = preparationTime;
}
public String getStatus()
{
return status;
}
public void setStatus (String status)
{
this.status = status;
}
public String getQuantity()
{
return quantity;
}
public void setQuantity (String quantity)
{
this.quantity = quantity;
}
public String getPublished()
{
return published;
}
public void setPublished (String published)
{
this.published = published;
}
@Override
public String toString()
{
return "ClassPojo [keywords = "+keywords+", productProperties = "+productProperties+", preparationTime = "+preparationTime+", status = "+status+", quantity = "+quantity+", published = "+published+"]";
}
}
public class ProductProperties
{
private String id;
private String title;
private String measurementUnit;
private String value;
public String getId()
{
return id;
}
public void setId (String id)
{
this.id = id;
}
public String getTitle()
{
return title;
}
public void setTitle (String title)
{
this.title = title;
}
public String getMeasurementUnit()
{
return measurementUnit;
}
public void setMeasurementUnit (String measurementUnit)
{
this.measurementUnit = measurementUnit;
}
public String getValue()
{
return value;
}
public void setValue (String value)
{
this.value = value;
}
@Override
public String toString()
{
return "ClassPojo [id = "+id+", title = "+title+", measurementUnit = "+measurementUnit+", value = "+value+"]";
}
}
而且回调将是Callback<ResponseJSON>
你可以通过reponse.body()的产品结果的getResult()的getProducts()。
我从http://pojo.sodhanalibrary.com/生成了模型。你可以通过引用我给出的模型创建另一个。
作为您服务的回应,您有一个关键字为“结果”的对象,包含一些字段和产品列表(数组,带有关键“产品”)。你的ProductsModel
是相当不错的。但你实施改造是错误的,应该是:
RetrofitApi.getVendorAdminApi()
.getAdminProductss(userToken, limit, pageNumber, filters)
.enqueue(new Callback<ProductsModel>() {
@Override
public void onResponse(Call<ProductsModel> call, Response<ProductsModel> response) {
if (response.isSuccessful()) {
resultListener.onSuccess(response.body());
} else {
resultListener.onFailure();
}
}
@Override
public void onFailure(Call<ProductsModel> call, Throwable t) {
resultListener.onFailure();
t.printStackTrace();
}
});
的变化:所有List<ProductsModel>
通过ProductsModel
更换。
您还可以添加您的ResultProducts模型类 –
在此URL(http://www.jsonschema2pojo.org/)中复制上述模型并查看模型。 –