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)
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的希望,只要你想它可能是工作
| 归档时间: |
|
| 查看次数: |
1935 次 |
| 最近记录: |