首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gson无法解析json中的字节数组。

Gson无法解析json中的字节数组。
EN

Stack Overflow用户
提问于 2022-05-30 12:32:10
回答 1查看 133关注 0票数 0

使用旧的http库,并且不能按照说明使用新的库。为什么当pojo定义了字节数组时,gson需要一个对象。

我的代码:

代码语言:javascript
复制
     private EternalAsyncHttpClient client = new EternalAsyncHttpClient();
  RequestParams params = new RequestParams();
                params.put("LocationName","Document Returned"); //?LocationName=Document Returned
                client.get(GET_PDF_DETAILS_API,params, new AsyncHttpResponseHandler() {
                    @Override
                    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                        PDFResponse pdfResponse = gson.fromJson(new String(responseBody), PDFResponse.class);
                        Debug.i("pdf: success ");
    }on Failure...

Pojo级:

代码语言:javascript
复制
public class PDFResponse {

    private Integer pdfconfigid;
    private String locationName;
    private String imgPath;
    private byte [] imgBinaryData;
    private String locationCode;
    private String activeStatus;
    private String address;
    public Integer getPdfconfigid() {
        return pdfconfigid;
    }
    public void setPdfconfigid(Integer pdfconfigid) {
        this.pdfconfigid = pdfconfigid;
    }
    public String getLocationName() {
        return locationName;
    }
    public void setLocationName(String locationName) {
        this.locationName = locationName;
    }
    public String getImgPath() {
        return imgPath;
    }
    public void setImgPath(String imgPath) {
        this.imgPath = imgPath;
    }
    public String getLocationCode() {
        return locationCode;
    }
    public void setLocationCode(String locationCode) {
        this.locationCode = locationCode;
    }
    public String getActiveStatus() {
        return activeStatus;
    }
    public void setActiveStatus(String activeStatus) {
        this.activeStatus = activeStatus;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }

    public byte[] getImgBinaryData() {
        return imgBinaryData;
    }

    public void setImgBinaryData(byte[] imgBinaryData) {
        this.imgBinaryData = imgBinaryData;
    }
}

错误:

代码语言:javascript
复制
 E/AsyncHttpRH: User-space exception detected!
    com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:221)
        at com.google.gson.Gson.fromJson(Gson.java:861)

只有当我尝试使用gson将json转换为对象时才会发生User-space exception detected!错误,因此很可能是在没有转换代码的情况下出现了gson错误--也没有例外。

json:

代码语言:javascript
复制
[
    {
        "pdfconfigid": 6,
        "LocationName": "Document Returned",
        "imgPath": "~/PdfReportCompanyLogo/6/places-to-visit-in-west-india.jpg",
        "imgBinaryData": [-1,40,-1],
        "LocationCode": "LOC0008",
        "ActiveStatus": "Active",
        "address": "address"
    }
]

更新:使用

代码语言:javascript
复制
@SerializedName("imgBinaryData")
public List<Integer> imgBinaryData = null;

也不管用。

EN

回答 1

Stack Overflow用户

发布于 2022-05-30 12:43:16

使用下面的类,因为您的POJO与JSON响应不匹配,例如在JSON响应中,您有ActiveStatus,但是在POJO中是activeStatus

代码语言:javascript
复制
public class Example {

@SerializedName("pdfconfigid")

private int pdfconfigid;
@SerializedName("LocationName")

private String locationName;
@SerializedName("imgPath")

private String imgPath;
@SerializedName("imgBinaryData")

private List<Integer> imgBinaryData = null;
@SerializedName("LocationCode")

private String locationCode;
@SerializedName("ActiveStatus")

private String activeStatus;
@SerializedName("address")

private String address;

public int getPdfconfigid() {
return pdfconfigid;
}

public void setPdfconfigid(int pdfconfigid) {
this.pdfconfigid = pdfconfigid;
}

public String getLocationName() {
return locationName;
}

public void setLocationName(String locationName) {
this.locationName = locationName;
}

public String getImgPath() {
return imgPath;
}

public void setImgPath(String imgPath) {
this.imgPath = imgPath;
}

public List<Integer> getImgBinaryData() {
return imgBinaryData;
}

public void setImgBinaryData(List<Integer> imgBinaryData) {
this.imgBinaryData = imgBinaryData;
}

public String getLocationCode() {
return locationCode;
}

public void setLocationCode(String locationCode) {
this.locationCode = locationCode;
}

public String getActiveStatus() {
return activeStatus;
}

public void setActiveStatus(String activeStatus) {
this.activeStatus = activeStatus;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72434401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档