Home > database >  How to implelement this on retrofit?
How to implelement this on retrofit?

Time:08-14

Hello I am an android developer and i have never before faced this type of JSON response where there is the "status, message and Data" part getting nothing at all empty screen whenever i try to run my code i am suspecting the issue is in my model.

this is the postman response as is

{
  "Status": 200,
  "Message": "OK",
  "Data": {
    "ServiceTypes": [
      {
        "Id": 1,
        "ServiceTypeNameAr": "صيانة",
        "ServiceTypeNameEn": "Maintenance",
        "MainServices": [
          {
            "Id": 11,
            "ServiceTypeId": 1,
            "MainServiceNameAr": "تكييفات\r\n",
            "MainServiceNameEn": "Air conditioning\r\n",
            "SubServices": null
          },
          {
            "Id": 12,
            "ServiceTypeId": 1,
            "MainServiceNameAr": "كهرباء\r\n",
            "MainServiceNameEn": "Electricity\r\n",
            "SubServices": null
          },
          {
            "Id": 14,
            "ServiceTypeId": 1,
            "MainServiceNameAr": "سباكة",
            "MainServiceNameEn": "Plumbing\r\n",
            "SubServices": null
          },
          {
            "Id": 15,
            "ServiceTypeId": 1,
            "MainServiceNameAr": "اجهزة منزلية\r\n",
            "MainServiceNameEn": "Home appliances\r\n",
            "SubServices": null
          }
        ]
     }
}

i want to implement this as a pojo(model) in my code this is my try

public class ServiceTypeWebEntity {
    @SerializedName("Status")
    private int Status;
    @SerializedName("Message")
    private String Message;
    @SerializedName("data")
    public List<ServiceTypeModel> ServicesType;

    public int getStatus() {
        return Status;
    }

    public void setStatus(int status) {
        Status = status;
    }

    public String getMessage() {
        return Message;
    }

    public void setMessage(String message) {
        Message = message;
    }

    public List<ServiceTypeModel> getServicesType() {
        return ServicesType;
    }

    public void setServicesType(List<ServiceTypeModel> servicesType) {
        ServicesType = servicesType;
    }

    public class ServiceTypeModel {
        @SerializedName("Id")
        private int id;
        @SerializedName("ServiceTypeNameAr")
        private String serviceTypeNameAr;
        @SerializedName("ServiceTypeNameEn")
        private String serviceTypeNameEn;
        @SerializedName("MainServices")
        private List<MainServicesModel> mainServicesList;

        public List<MainServicesModel> getMainServicesList() {
            return mainServicesList;
        }

        public void setMainServicesList(List<MainServicesModel> mainServicesList) {
            this.mainServicesList = mainServicesList;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getServiceTypeNameAr() {
            return serviceTypeNameAr;
        }

        public void setServiceTypeNameAr(String serviceTypeNameAr) {
            this.serviceTypeNameAr = serviceTypeNameAr;
        }

        public String getServiceTypeNameEn() {
            return serviceTypeNameEn;
        }

        public void setServiceTypeNameEn(String serviceTypeNameEn) {
            this.serviceTypeNameEn = serviceTypeNameEn;
        }
    }
}

i tried to separate them as well into two models the status, message and data which calls for the services type which is in another model. if anything else or more clarification is needed pls don't hesitate to ask me for code or anything. any help is really appreciated. Thanks in advance.

CodePudding user response:

you may implement pojo as this:

this class represent the top level object:

public class ResponseModel {
   private Integer Status;
   private String Message;
   private DataModel Data;

   // getters, setters, constructors
}

this class represents Data class:


public class DataModel {
    private List<ServiceTypeModel> ServiceTypes;

    // getters, setters, constructors
}

and this class maps with ServiceTypes

public class ServiceTypeModel {
    private Long Id;
    private String ServiceTypeNameAr;
    private String ServiceTypeNameEn;
    private List<MainServiceModel> MainServices;

    // getters, setters, constructors
}

And finally this class maps with MainServices

public class MainServiceModel{
    private Long Id;
    private Long ServiceTypeId;
    private String MainServiceNameAr;
    private String MainServiceNameEn;
    private List<SubServiceModel> SubServices;

    // getters, setters, constructors

}

for SubServices, you have provided null so I imagine this is a List of SubServiceModel. You can implement this class like how I did for the others. Also you can use some online tools to generate pojo of a json like this

CodePudding user response:

I think the problem is with your ServiceTypeWebEntity model where you set data as a list but it's an object which has ServiceTypes key with List<ServiceTypeModel> inside, so you can try this model.

public class ServiceTypeWebEntity {
    @SerializedName("Status")
    private int Status;
    @SerializedName("Message")
    private String Message;
    @SerializedName("data")
    public ServiceTypes ServicesType;

    public int getStatus() {
        return Status;
    }

    public void setStatus(int status) {
        Status = status;
    }

    public String getMessage() {
        return Message;
    }

    public void setMessage(String message) {
        Message = message;
    }

    public ServiceTypes getServicesType() {
        return ServicesType;
    }

    public void setServicesType(ServiceTypes servicesType) {
        ServicesType = servicesType;
    }

 public class ServiceTypes{
       
    @SerializedName("ServiceTypes")
     public List<ServiceTypeModel> ServicesType;
      
   public List<ServiceTypeModel> getServicesType() {
        return ServicesType;
    }

    public void setServicesType(List<ServiceTypeModel> servicesType) {
        ServicesType = servicesType;
    }
    }
    
    public class ServiceTypeModel {
        @SerializedName("Id")
        private int id;
        @SerializedName("ServiceTypeNameAr")
        private String serviceTypeNameAr;
        @SerializedName("ServiceTypeNameEn")
        private String serviceTypeNameEn;
        @SerializedName("MainServices")
        private List<MainServicesModel> mainServicesList;

        public List<MainServicesModel> getMainServicesList() {
            return mainServicesList;
        }

        public void setMainServicesList(List<MainServicesModel> mainServicesList) {
            this.mainServicesList = mainServicesList;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getServiceTypeNameAr() {
            return serviceTypeNameAr;
        }

        public void setServiceTypeNameAr(String serviceTypeNameAr) {
            this.serviceTypeNameAr = serviceTypeNameAr;
        }

        public String getServiceTypeNameEn() {
            return serviceTypeNameEn;
        }

        public void setServiceTypeNameEn(String serviceTypeNameEn) {
            this.serviceTypeNameEn = serviceTypeNameEn;
        }
    }
}

hope it helps.

  • Related