我从服务中得到readline
结果,如下所述:
json
我和{
"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 $
答案 0 :(得分:0)
您的问题是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();
答案 1 :(得分:0)
将您的Retrofit调用更改为:
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>
1}}到ProductsModel
将解决您的问题。
希望它有所帮助!
答案 2 :(得分:0)
&#34;结果&#34; json数据中的节点是一个对象而不是一个数组。 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/生成了模型。如果您愿意,可以通过参考我给出的模型来创建另一个。
答案 3 :(得分:0)
作为您服务的回复,您有一个带有密钥的对象:&#34;结果&#34;,包含一些字段和产品清单(数组,带有密钥&#34;产品&#34;) 。你的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
。