Ошибка при получении ответа с использованием модификации 2. Не удалось проанализировать массив в объекте - PullRequest
0 голосов
/ 18 сентября 2018

Не удалось разобрать ответ с массивом внутри объекта.

Данные моего ответа:

{
    "Status":true,
    "Code":0,
    "Message":"Data read successfully...",
    "Data":[
        {
            "PSID":"w",
            "Country":"w",
            "City":"w",
            "NumberOfLikes":0
        }   
    ]
}

Мои классы POJO: SearchSuppliers.java

public class SearchSuppliers{
private boolean status;
private String message;
private List<DataItemSearchSuppliers> data;
private int code;

public void setStatus(boolean status){
    this.status = status;
}

public boolean isStatus(){
    return status;
}

public void setMessage(String message){
    this.message = message;
}

public String getMessage(){
    return message;
}

public void setData(List<DataItemSearchSuppliers> data){
    this.data = data;
}

public List<DataItemSearchSuppliers> getData(){
    return data;
}

public void setCode(int code){
    this.code = code;
}

public int getCode(){
    return code;
}

@Override
public String toString(){
    return 
        "SearchSuppliers{" + 
        "status = '" + status + '\'' +
        ",message = '" + message + '\'' +
        ",data = '" + data + '\'' +
        ",code = '" + code + '\'' +
        "}";
    }
}

Класс данных для массива в ответе: DataItemSearchSuppliers.java

public class DataItemSearchSuppliers {

private String pSID;
private String country;
private String city;
private int numberOfLikes;

public void setPSID(String pSID){
    this.pSID = pSID;
}

public String getPSID(){
    return pSID;
}
public void setCountry(String country){
    this.country = country;
}
public String getCountry(){
    return country;
}
    public void setCity(String city){
    this.city = city;
}

public String getCity(){
    return city;
}
public void setNumberOfLikes(int numberOfLikes){
    this.numberOfLikes = numberOfLikes;
}

public int getNumberOfLikes(){
    return numberOfLikes;
}

@Override
public String toString(){
    return
            "DataItem{" +
                    "pSID = '" + pSID + '\'' +
                    ",country = '" + country + '\'' +
                    ",city = '" + city + '\'' +
                    ",numberOfLikes = '" + numberOfLikes + '\'' +
                    "}";
}

Мой звонок в API:

@Headers("Content-Type: application/json; charset=utf-8")
@POST("api/supplier/listSupplier")
Call<SearchSuppliers> searchSuppliersCall(@Query("searchcode") int searchCode, @Query("start") int start, @Query("end") int end,@Body JsonObject body);

Тело ответа, которое я получаю: SearchSuppliers {status = 'false', message = 'null', data = 'null', code = '0'} где должен быть образец, о котором я упоминал выше. Я получаю желаемый ответ, если я изменяю вызов как JsonObject:

Call<JsonObject> searchSuppliersCall(@Query("searchcode") int searchCode, @Query("start") int start, @Query("end") int end,@Body JsonObject body);

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы можете сделать это как

@SerializedName("Status")
@Expose
private boolean status;
@SerializedName("Message")
@Expose
private String message;
@SerializedName("Data")
@Expose
private List<DataItemSearchSuppliers> data;
@SerializedName("Code")
@Expose
private int code;

Надеюсь, это поможет вам.

0 голосов
/ 18 сентября 2018

Один из вариантов: изменить имена переменных в верхний регистр, например

private boolean Status;
private String Message;
private List<DataItemSearchSuppliers> Data;
private int Code;

и аналогично в классе типов массивов

private String PSID;
private String Country;
private String City;
private int NumberOfLikes;

согласно ключам json.

...