繁体   English   中英

在翻新Android中解析响应时出错

[英]Error in parsing response in retrofit android

我正在尝试首次在Android中使用Retrofit。 我已经成功打过电话,但是在以下情况下我感到震惊:我得到两种类型的响应: 响应1:成功响应

{
    "results": {
        "message": {
            "en": 301000897837,
            "ete": "PM",
            "vto": "PM",
            "er": false
        },
        "status": "Success",
        "code": 200
    }
}

响应2:错误响应

{
    "results": {
        "message": "Invalid",
        "status": "No Content",
        "code": 204
    }
}

我创建了两个POJO类,即EwResponse.classEwResults.class

public class EwayBillResponse {

    @SerializedName("results")
    @Expose
    private EwayBillResults results;

    /**
     * No args constructor for use in serialization
     *
     */
    public EwayBillResponse() {
    }

公共类EwResults {

@SerializedName("message")
@Expose
private String message;
@SerializedName("status")
@Expose
private String status;
@SerializedName("code")
@Expose
private Integer code;

/**
 * No args constructor for use in serialization
 *
 */
public EwResults() {
}

我可以拨打电话并分析错误响应的错误情况。 我知道我没有在success_response成功响应中使用message POJO ,但是我不知道如何在翻新的api调用中使用两种类型的响应调用。

如果成功响应,这是我得到的以下错误:

java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 24 path $.results.message

这是我第一次使用改造。 所以请帮帮我。

在此先感谢EDIT: 请求呼叫代码:

Call<EwResponse> ewcall=apiService.generateEB(EwResponse);
                            ewcall.enqueue(new Callback<EwResponse>() {
                                @Override
                                public void onResponse(@NonNull Call<EwResponse> call, @NonNull Response<EwResponse> response) {
                                    if(response.isSuccessful()&&response.body().getResults().getCode()==200){
                                        Gson gson=new Gson();
                                        EwMessage EwMessage=gson.fromJson(response.body().getResults().getMessage(),EwMessage.class);
                                    }else{
                                        Toast.makeText(getActivity(), ""+response.body().getResults().getMessage(), Toast.LENGTH_SHORT).show();
                                    }
                                }

                                @Override
                                public void onFailure(@NonNull Call<EwResponse> call, @NonNull Throwable t) {
                                    progressDialog.dismiss();
                                    Log.e("ERROR",""+t.getMessage());
                                }

                            });

您将需要动态处理字符串响应和对象响应的情况,使用此方法

    public class Results {

@SerializedName("message")
@Expose
private Object message;
@SerializedName("status")
@Expose
private String status;
@SerializedName("code")
@Expose
private Integer code;

public Object getMessage() {
return message;
}

public void setMessage(Object message) {
this.message = message;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public Integer getCode() {
return code;
}

public void setCode(Integer code) {
this.code = code;
}

}

results对象内部,您有一个称为message字段,该字段可以是一个object/string

因此,在内部改造onResponse方法中,

if (response.getMessage() instanceof Message)
        {
        handleObjectResponse();
     }
    else 
        {
        handleStringResponse();
     }

Message.java

public class Message {

@SerializedName("en")
@Expose
private Integer en;
@SerializedName("ete")
@Expose
private String ete;
@SerializedName("vto")
@Expose
private String vto;
@SerializedName("er")
@Expose
private Boolean er;

public Integer getEn() {
return en;
}

public void setEn(Integer en) {
this.en = en;
}

public String getEte() {
return ete;
}

public void setEte(String ete) {
this.ete = ete;
}

public String getVto() {
return vto;
}

public void setVto(String vto) {
this.vto = vto;
}

public Boolean getEr() {
return er;
}

public void setEr(Boolean er) {
this.er = er;
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM