gpt4 book ai didi

java - 从 Retrofit 加载数据问题 : Expected BEGIN_ARRAY but was BEGIN_OBJECT

转载 作者:行者123 更新时间:2023-12-01 11:50:05 27 4
gpt4 key购买 nike

首先,我从服务器获取的 JSON:

{
"actor": [
{
"uid": "/actor-12461615214214348149",
"subtype": "some type",
"location": {
"lat": 38.931,
"lng": -77.21
},
"prop1": 100,
"prop2": 1,
"prop3": 20,
"prop4": 80
},
{
"uid": "/actor-13893903348679219933",
"subtype": "some type",
"location": {
"lat": 38.93,
"lng": -77.21
},
"prop1": 100,
"prop2": 1,
"prop3": 20,
"prop4": 80
},
{
"uid": "/actor-13809263303067864337",
"subtype": "some type",
"location": {
"lat": 38.93,
"lng": -77.21
},
"prop1": 100,
"prop2": 1,
"prop3": 20,
"prop4": 80
}
]
}

以及我想从中加载的 POJO:

public class Actor {

private String uid;
private String subtype;
private Location loc;
private int prop1;
private int prop2;
private String prop3;
private String prop4;

public String getUid() {
return uid;
}

public void setUid(String uid) {
this.uid = uid;
}

public String getSubtype() {
return subtype;
}

public void setSubtype(String subtype) {
this.subtype = subtype;
}

public Location getLoc() {
return loc;
}

public void setLoc(Location loc) {
this.loc = loc;
}

public int getProp1() {
return prop1;
}

public void setProp1(int prop1) {
this.prop1 = prop1;
}

public int getProp2() {
return prop2;
}

public void setProp2(int prop2) {
this.prop2 = prop2;
}

public String getProp3() {
return prop3;
}

public void setPower(String prop3) {
this.prop3 = prop3;
}

public String getProp4() {
return prop4;
}

public void setProp4(String prop4) {
this.prop4 = prop4;
}


public class Location{
private double lat;
private double lng;

public double getLng() {
return lng;
}
public void setLng(double lng) {
this.lng = lng;
}

public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}

}
}

我指定的 Web 服务调用正在寻找 Actor[] 响应。

完成这一切之后,我看到了 RetroFit 的 IllegalStateException:预期为 BEGIN_ARRAY,但在第 1 行第 2 列为 BEGIN_OBJECT

我已经查看了此处发布的其他 RetroFit 错误,它们最常见的情况是人们在获取的数据是单个对象时尝试加载数组。或者,相反的情况是人们获取对象数组并尝试将其加载到单个 pojo 中。

但就我而言,在我看来,我尝试加载的数组与 JSON 格式的简单对象数组之间有很好的匹配。

我显然错过了一些东西......请再多一双眼睛?

最佳答案

您有两种选择来解决该问题:

1-如果您有权访问服务器来更改服务,请使其提供如下响应:

[
{
"uid": "/actor-12461615214214348149",
"subtype": "some type",
"location": {
"lat": 38.931,
"lng": -77.21
},
"prop1": 100,
"prop2": 1,
"prop3": 20,
"prop4": 80
},
{
"uid": "/actor-13893903348679219933",
"subtype": "some type",
"location": {
"lat": 38.93,
"lng": -77.21
},
"prop1": 100,
"prop2": 1,
"prop3": 20,
"prop4": 80
}]

2-如果您无法从服务器更改值,请使用参与者列表创建一个包装器 POJO,并进行改造以将其作为回调提供。

public class ActorWrapper {
private List<Actor> actor;

//GETTERS AND SETTERS
}

关于java - 从 Retrofit 加载数据问题 : Expected BEGIN_ARRAY but was BEGIN_OBJECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28865599/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com