使用Retrofit检查哪种类型的数据作为响应

Ash*_*gar 3 android json retrofit2

当我使用Retrofit时,我已经设计了所有POJO并且它运行完美.API的设计方式是,如果数据是当前日期或未来日期而不是过去日期,它将发送所需数据.在响应中,我将获得一个JSON响应,其中包含JSON对象和数组的组合作为JSON对象的值,POJO就是根据这一点.现在,如果没有当前和未来日期的记录,那么我将收到一个字符串而不是数组,这会导致API错误java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING.所以我想知道是否有任何方法可以确定 - 我收到的数组或字符串是什么?以及如何根据这个更新POJO以避免该错误.

服务器没有数据时的JSON响应

{
"Result_Code": "ND",
"Result_Status": "Success",
"Result_Message": "No record found in database.",
"Result_Output": "",
"updatedDate": "20-07-2017 10:44:37"
}
Run Code Online (Sandbox Code Playgroud)

当服务器有数据但有一个区别时,JOSN响应是相同的

{
 "Result_Code": "ND",
 "Result_Status": "Success",
 "Result_Message": "record found in database.",
 "Result_Output": [{multiple elements},
                   {multiple elements},
                   {multiple elements}....],
 "updatedDate": "20-07-2017 10:44:37"
 }
Run Code Online (Sandbox Code Playgroud)

Chi*_*iya 7

Pojo类命名 ResponseModel

public class ResponseModel {
private String Result_Code;
private String Result_Status;
private String Result_Message;
private Object Result_Output;
private String updatedDate;
...
}
Run Code Online (Sandbox Code Playgroud)

使用Object你可以变形如下

call.enqueue(new Callback<ResponseModel>() 
{
  @Override
  public void onResponse(Response<ResponseModel> response, Retrofit retrofit)
   {
     parseData();     //  get other data from ResponseModel Class
     if (response.getResultOutput() instanceof List<POJO>)
     {
       doSomething();
     }
      else if (response.getResultOutput() instanceof String)
     {
       doSomething();
     }
     else  //must be error object
     {
       doSomething();
     }
  }

@Override
public void onFailure(Throwable t) 
{
 ///Handle failure
}
});
Run Code Online (Sandbox Code Playgroud)

instanceof你检查所需的Object类型

List<POJO>用于多种元素Model *检查更新的解决方案从响应对象解析ArrayList的希望,只要你想它可能是工作