【问题标题】:Parse two different API response using Retrofit 2 in Android在 Android 中使用 Retrofit 2 解析两个不同的 API 响应
【发布时间】:2020-02-12 03:14:46
【问题描述】:

我在使用 Retrofit 2 解析 API 响应时遇到问题。

API 已投入生产,我无法请求更改 API。

以下是我从服务器得到的两个不同的响应

成功响应:

{
    "status":0,
    "empId":121,
    "message":"Data available",
    "data":{
        "name":"Sam",
        "designation": "Software Engineer",
        "mob": "1255565456"
    }

}

失败响应

{
    "status":10,
    "empId":121,
    "message":"No data available",
    "data":""

}

解析类

class Response{
    public int status;
    public String message;
    public int empId;
    public Student data;
}

class Student{

    public String name;
    public String designation;
    public String mob;
}

我能够解析成功响应。但在失败案例中出现以下异常。

java.lang.IllegalStateException: 应为 BEGIN_OBJECT 但为 STRING

【问题讨论】:

    标签: java android serialization retrofit2


    【解决方案1】:

    试试这个,

     Object getrow = null;
                    try {
                        getrow = this.// your object
                        LinkedTreeMap<Object, Object> tree = (LinkedTreeMap) getrow;
                        String name = tree.get(<your body>).toString()
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    

    【讨论】:

      【解决方案2】:

      处理这种情况的方法是将“数据”视为通用对象,而不是字符串或“学生”。

      p̶u̶b̶l̶i̶c̶ ̶S̶t̶u̶d̶e̶n̶t̶ ̶d̶a̶t̶a̶;̶
      
      public Object data;
      

      在使用数据时添加这样的检查

      if(data instanceof String){
         String parsedData=data.toString();
      }else{
         Student parsedData= (Student) data;
      }
      

      【讨论】:

        【解决方案3】:

        将 Student 设置为内部类或响应类。 Retrofit 将解析响应并为您提供对象。

            class Response
            {
                public int status;
                public String message;
                public int empId;
                public Student data;
        
             Class Data 
             {
             public String name;
             public String designation;
             public String mob;
             }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-11
          • 2018-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多