【发布时间】:2018-01-04 03:32:56
【问题描述】:
我知道这个问题已经被问过很多次了。但是我无法理解这个问题。
我遇到了错误。
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
下面是我的代码。
PriceInterface priceInterface = ApiClient.getClient().create(PriceInterface.class);
Map<String, String> params = new HashMap<String, String>();
params.put("date", "today");
params.put("circle", "Chandigarh");
Call<PriceListBean> call = priceInterface.getMyThing(params);
call.enqueue(new Callback<PriceListBean>() {
@Override
public void onResponse(Call<PriceListBean> call, Response<PriceListBean> response) {
Log.e("response is","++++"+response.body().toString());
}
@Override
public void onFailure(Call<PriceListBean> call, Throwable t) {
Log.e("failure message is",""+t.getLocalizedMessage());
// t.getLocalizedMessage();
}
});
以下是我从服务器获取的 json。
{
"price": [{
"id": 678,
"date_time": "2017-07-25",
"type": "Diesel",
"place": "Chandigarh",
"price": "55.75"
}, {
"id": 639,
"date_time": "2017-07-25",
"type": "Petrol",
"place": "Chandigarh",
"price": "64.74"
}],
"errorCode": 0,
"errorDesc": "Success"
}
我为此创建了 Pojo。
public class PriceListBean {
@SerializedName("price")
@Expose
private List<Price> price = null;
@SerializedName("errorCode")
@Expose
private Integer errorCode;
@SerializedName("errorDesc")
@Expose
private String errorDesc;
public List<Price> getPrice() {
return price;
}
public void setPrice(List<Price> price) {
this.price = price;
}
public Integer getErrorCode() {
return errorCode;
}
public void setErrorCode(Integer errorCode) {
this.errorCode = errorCode;
}
public String getErrorDesc() {
return errorDesc;
}
public void setErrorDesc(String errorDesc) {
this.errorDesc = errorDesc;
}
}
这可以通过 Volley 或 Gson 轻松完成,但是当我尝试使用 Retrofit 时,我陷入了困境。我不确定我是否得到正确的 json 格式
【问题讨论】:
-
您可能得到了错误的 json 数据。转换器期待一个 JsonObject ,但它却得到了 String 。请在休息客户端中检查您的 api,并在此处发布回复。
-
@SureshKumar 我已经检查了浏览器上的数据。还有邮递员。他们都显示正确的格式。不知道如何在我的代码中看到响应。
-
可能是因为“价格”键同时出现在 json 的第一级和第二级?
-
此代码在制作 Price 类字符串的所有字段时工作正常。所以我认为问题出在您的 Price 类中,您可以添加该类的来源吗?
-
您可以做一件事来检查您是否获得了正确的响应或不添加响应拦截器并检查您的 rawResponse。如果您不知道我可以添加代码作为答案,我不会这样做,因为它不是您问题的一部分。
标签: android json web-services retrofit2