簡體   English   中英

使用 Android 中的 Retrofit 2 解析兩個不同的 API 響應

[英]Parse two different API response using Retrofit 2 in Android

我在使用 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

處理這種情況的方法是將“數據”視為通用 object 而不是字符串或“學生”。

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;
}

嘗試這個,

 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();
                }

使學生成為內部 class 或響應 class。 Retrofit 將解析響應並為您提供 object。

    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;
     }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM