我第一次尝试在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() {
}
我可以打电话并分析响应错误响应的错误情况。
我知道我在message POJO
中没有使用success_response
成功回复,但我对如何在api调用改造中使用两种类型的响应调用一无所知。
这是我在成功回复时遇到的以下错误:
java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 24 path $.results.message
这是我第一次使用改装。所以请帮助我。
提前致谢 修改 请求致电代码:
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());
}
});
答案 0 :(得分:0)
您需要动态处理字符串响应和对象响应的情况,使用此
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;
}
}