[英]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.class
和EwResults.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.