Retrofit2 GsonConverter预期为BEGIN_OBJECT,但在第1行第2列路径$处为BEGIN_ARRAY

时间:2018-11-23 07:09:26

标签: java android generics gson retrofit2

我遇到了一些问题。 我正在尝试从这样的服务器获取数据。

{
"Message": "",
"StatusCode": 0,
"Payload": [
    [

        {

        },
        {

        }
    ],
    [
        {

        },
        {

        }
    ]
]

}

我的BaseResponse是...

@SerializedName("Message")
@Expose
private String Message;

@SerializedName("StatusCode")
@Expose
private int StatusCode;

@SerializedName("Payload")
@Expose
private T Payload;

public String getMessage() {
    return Message;
}

public int getStatusCode() {
    return StatusCode;
}

public T getPayload() {
    return Payload;
}

我的改装界面是...

 @Multipart
@POST(APIServer.Tstgen.POST)
Observable<BaseResponse<List<List<MoneyResponse>>>> getMoneyMainResult(
        @PartMap Map<String, RequestBody> requestBodyMap
);

我认为一切都还可以,但是... Gson转换时总是会出错...

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但在第1行第2列路径$ BEGIN_ARRAY是

我的代码有什么问题?

5 个答案:

答案 0 :(得分:1)

更改为响应类并将您的有效负载类添加到列表中。

 @SerializedName("Payload")
 private List<Payload> payloadList;

使用getter setter方法

答案 1 :(得分:0)

将有效载荷设置为如下列表

@SerializedName("Message")
@Expose
private String Message;

@SerializedName("StatusCode")
@Expose
private int StatusCode;

@SerializedName("Payload")
@Expose
private List<Payload> Payload;

public String getMessage() {
return Message;
}

public int getStatusCode() {
return StatusCode;
}

public List<Payload> getPayload() {
return Payload;
}

 public  setPayload(List<Payload> payload) {
 this.payload=payload;
 }

答案 2 :(得分:0)

您应在基本存储库中更改类型def comb(list: List[(Char, Int)]): List[(Char, Int)] = list.flatMap{case (c,i) => (c,i) :: (if (i>1) (c,i-1)::Nil else Nil)} 字段,如下所示:

Payload

要了解有关改造文档的更多信息,此 Link 是有用的。

答案 3 :(得分:0)

@SerializedName("Message")
@Expose
private String Message;

@SerializedName("StatusCode")
@Expose
private int StatusCode;

@SerializedName("Payload")
@Expose
private Object Payload;

public String getMessage() {
    return Message;
}

public int getStatusCode() {
    return StatusCode;
}

public T getPayload() {
    return Payload;
}

尝试使用对象而不是通用对象。 由于Object是所有类型的超级类型,因此您可以键入强制类型转换。

答案 4 :(得分:0)

除了上面给出的响应之外。.还重新检查了您的Web服务URL ...此错误也是由于URL错误