Search code examples
javaandroidrestretrofit2android-proguard

Retrofit with proguard is not deserializing some models


In my code User model is not being unserialized despite being returned by the server. From my code client.getPerson() returns an instance of the Person object but client.getUser() returns an empty string What could be the problem?

My Client class as follows,

public class Client implements Serializable {

@SerializedName("address")
private String address;

@SerializedName("nhif_no")
private String nhifNo;

@SerializedName("occupation_name")
private String occupationName;

@SerializedName("person")
private Person person;

@SerializedName("kra_pin")
private String kraPin;

@SerializedName("user")
private User user;

@SerializedName("client_id")
private int clientId;

@SerializedName("sales_agent_id")
private int salesAgentId;

public void setAddress(String address){
    this.address = address;
}

public String getAddress(){
    return address;
}

public void setNhifNo(String nhifNo){
    this.nhifNo = nhifNo;
}

public String getNhifNo(){
    return nhifNo;
}

public void setOccupationName(String occupationName){
    this.occupationName = occupationName;
}

public String getOccupationName(){
    return occupationName;
}

public void setPerson(Person person){
    this.person = person;
}

public Person getPerson(){
    return person;
}

public void setKraPin(String kraPin){
    this.kraPin = kraPin;
}

public String getKraPin(){
    return kraPin;
}

public void setUser(User user){
    this.user = user;
}

public User getUser(){
    return user;
}

public void setClientId(int clientId){
    this.clientId = clientId;
}

public int getClientId(){
    return clientId;
}

public void setSalesAgentId(int salesAgentId){
    this.salesAgentId = salesAgentId;
}

public int getSalesAgentId(){
    return salesAgentId;
}
}

My Person class as follows,

public class Person implements Serializable {

@SerializedName("last_name")
private String lastName;

@SerializedName("middle_name")
private String middleName;

@SerializedName("first_name")
private String firstName;

@SerializedName("person_id")
private int personId;

public void setLastName(String lastName){
    this.lastName = lastName;
}

public String getLastName(){
    return lastName;
}

public void setMiddleName(String middleName){
    this.middleName = middleName;
}

public String getMiddleName(){
    return middleName;
}

public void setFirstName(String firstName){
    this.firstName = firstName;
}

public String getFirstName(){
    return firstName;
}

public void setPersonId(int personId){
    this.personId = personId;
}

public int getPersonId(){
    return personId;
}
}

My User class as follows,

public class User implements Serializable{

@SerializedName("role_id")
private int roleId;

@SerializedName("email")
private String email;

public void setRoleId(int roleId){
    this.roleId = roleId;
}

public int getRoleId(){
    return roleId;
}

public void setEmail(String email){
    this.email = email;
}

public String getEmail(){
    return email;
}
}

My JSON file as follows, { "client": { "client_id": 128, "nhif_no": "KJNH1289", "kra_pin": "210986", "sales_agent_id": 43, "address": "Kikuyu", "occupation_name": "Prisoner", "person": { "person_id": 358, "first_name": "Kamiti", "middle_name": "Jela", "last_name": "Baridi", "gender": { "gender_id": 1, "name": "Male" } }, "user": { "email": "[email protected]", "role_id": 2 } } }


Solution

  • Fixed it by adding the line below in the proguard rules file

    -keep class org.myapp.mypackage.models.** { *; }