Разобрать два разных ответа API с помощью Retrofit 2 в Android - PullRequest
0 голосов
/ 15 октября 2019

Я столкнулся с проблемой при разборе ответа API с помощью Retrofit 2.

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

Ответы [ 3 ]

0 голосов
/ 15 октября 2019

попробуйте,

 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();
                }
0 голосов
/ 15 октября 2019

Сделать ученика внутренним классом или классом ответа. и 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;
     }
    }
0 голосов
/ 15 октября 2019

Вы можете справиться с этой ситуацией, рассматривая «данные» как универсальный объект, а не как строку или «студент».

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...