0

I am trying to load a list of categories into a recycler view . I have created the POJO from Json body using POJO genertor. But when i try to get the rersponse it give me the following error : com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String. I can't seem to find why the error is coming , and before marking it as duplicate please see the attached code :

Json File

{
"status": true,
"code": 200,
"data": {
    "categories": [
        {
            "id": 2,
            "app_order": 2,
            "catId": 5,
            "catName": "Washing Machine",
            "type": "",
            "navigateToPage": "ServiceFeature",
            "imageIcon": "https://cumuluson.com/uploads/category/418441626002127.png",
            "headerFileType": null,
            "headerImage": "",
            "colorBackground": "white"
        },
        {
            "id": 4,
            "app_order": 3,
            "catId": 24,
            "catName": "SANITIZE CLEANING",
            "type": "",
            "navigateToPage": "ServiceFeature",
            "imageIcon": "https://cumuluson.com/uploads/category/486301626002234.png",
            "headerFileType": null,
            "headerImage": "",
            "colorBackground": "white"
        },
        {
            "id": 5,
            "app_order": 4,
            "catId": 8,
            "catName": "RO & Water Purifier",
            "type": "",
            "navigateToPage": "ServiceFeature",
            "imageIcon": "https://cumuluson.com/uploads/category/350671626002581.png",
            "headerFileType": null,
            "headerImage": "",
            "colorBackground": "white"
        },
        {
            "id": 1,
            "app_order": 6,
            "catId": 1,
            "catName": "Air Conditioner",
            "type": "",
            "navigateToPage": "ServiceFeature",
            "imageIcon": "https://cumuluson.com/uploads/category/968621635528373.png",
            "headerFileType": "image",
            "headerImage": "",
            "colorBackground": "white"
        },
        {
            "id": 7,
            "app_order": 6,
            "catId": 12,
            "catName": "Kitchen Clean",
            "type": "",
            "navigateToPage": "ServiceFeature",
            "imageIcon": "https://cumuluson.com/uploads/category/949491626003508.png",
            "headerFileType": null,
            "headerImage": "",
            "colorBackground": "white"
        },
        {
            "id": 8,
            "app_order": 7,
            "catId": 18,
            "catName": "Plumbing",
            "type": "",
            "navigateToPage": "ServiceFeature",
            "imageIcon": "https://cumuluson.com/uploads/category/199891626003693.png",
            "headerFileType": null,
            "headerImage": "",
            "colorBackground": "white"
        },
        {
            "id": 9,
            "app_order": 8,
            "catId": 19,
            "catName": "Chimney",
            "type": "",
            "navigateToPage": "ServiceFeature",
            "imageIcon": "https://cumuluson.com/uploads/category/158251626003741.png",
            "headerFileType": null,
            "headerImage": "",
            "colorBackground": "white"
        },
        {
            "id": 10,
            "app_order": 9,
            "catId": 17,
            "catName": "Carpenter",
            "type": "",
            "navigateToPage": "ServiceFeature",
            "imageIcon": "https://cumuluson.com/uploads/category/900611626003785.png",
            "headerFileType": null,
            "headerImage": "",
            "colorBackground": "white"
        },
        {
            "id": 11,
            "app_order": 10,
            "catId": "",
            "catName": "Cleaning",
            "type": 2,
            "navigateToPage": "Service",
            "imageIcon": "https://cumuluson.com/uploads/category/578281626003939.png",
            "headerImage": "https://cumuluson.com/uploads/category/",
            "colorBackground": "white"
        },
        {
            "id": 12,
            "app_order": 11,
            "catId": "",
            "catName": "Appliance",
            "type": 1,
            "navigateToPage": "Service",
            "imageIcon": "https://cumuluson.com/uploads/category/376691626004097.png",
            "headerImage": "https://cumuluson.com/uploads/category/",
            "colorBackground": "white"
        },
        {
            "id": 6,
            "app_order": 12,
            "catId": 4,
            "catName": "Refrigerator",
            "type": "",
            "navigateToPage": "ServiceFeature",
            "imageIcon": "https://cumuluson.com/uploads/category/730821626002736.png",
            "headerFileType": null,
            "headerImage": "",
            "colorBackground": "white"
        }
    ]
},
"error": null
}

Response Class

public class HomeCatResponse {
private int code;
private HomeCatData data;
private Object  error;
private boolean status;

public int getCode(){
    return code;
}

public HomeCatData getData(){
    return data;
}

public Object getError(){
    return error;
}

public boolean isStatus(){
    return status;
}

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

Data Class

public class HomeCatData {
private List<Category> categories;

public List<Category> getCategories(){
    return categories;
}

@Override
public String toString(){
    return 
        "HomeCatData{" +
        "categories = '" + categories + '\'' + 
        "}";
    }
}

Category Class

public class Category {
private int catId;
private String colorBackground;
private String headerFileType;
private String headerImage;
private String catName;
private String imageIcon;
private String navigateToPage;
private int appOrder;
private int id;
private String type;

public int getCatId(){
    return catId;
}

public String getColorBackground(){
    return colorBackground;
}

public String getHeaderFileType(){
    return headerFileType;
}

public String getHeaderImage(){
    return headerImage;
}

public String getCatName(){
    return catName;
}

public String getImageIcon(){
    return imageIcon;
}

public String getNavigateToPage(){
    return navigateToPage;
}

public int getAppOrder(){
    return appOrder;
}

public int getId(){
    return id;
}

public String getType(){
    return type;
}

@Override
public String toString(){
    return 
        "Category{" +
        "catId = '" + catId + '\'' + 
        ",colorBackground = '" + colorBackground + '\'' + 
        ",headerFileType = '" + headerFileType + '\'' + 
        ",headerImage = '" + headerImage + '\'' + 
        ",catName = '" + catName + '\'' + 
        ",imageIcon = '" + imageIcon + '\'' + 
        ",navigateToPage = '" + navigateToPage + '\'' + 
        ",app_order = '" + appOrder + '\'' + 
        ",id = '" + id + '\'' + 
        ",type = '" + type + '\'' + 
        "}";
    }
  }

The request using retrofit

private void initRetrofit() {
    HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
    loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(loggingInterceptor).build();
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Config.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build();
    api = retrofit.create(UrbanLiveApi.class);
}

private void getCategories() {
    Call<HomeCatResponse> call = api.getHomeCategories();
    call.enqueue(new Callback<HomeCatResponse>() {
        @Override
        public void onResponse(Call<HomeCatResponse> call, Response<HomeCatResponse> response) {
            if (!response.isSuccessful()) {
                showToast("Error " + response.errorBody() + response.toString());
                Log.d(TAG, response.errorBody() + response.message() + response.toString());
                return;
            }
            HomeCatResponse categories = response.body();
            showToast(categories.getData().getCategories().get(0).getCatName());
            showCategories(categories.getData().getCategories());
        }

        @Override
        public void onFailure(Call<HomeCatResponse> call, Throwable t) {
            Log.d(TAG, t.getMessage());
            Log.d(TAG, t.toString());
            showToast(t.getMessage());
        }
    });
}

Any help would be much appreciated .

2
  • 1
    See stackoverflow.com/questions/30841981/…. Even though that is for "" to null strings, the first answer should also work for other types like numbers. Commented Feb 2, 2022 at 8:41
  • 3
    "catId": "", will not convert to int catId Commented Feb 2, 2022 at 8:43

3 Answers 3

1

There are multiple entries where catId is an empty string, e.g.:

{
        "id": 11,
        "app_order": 10,
        "catId": "", <-- should be a number
        "catName": "Cleaning",
        "type": 2,
        "navigateToPage": "Service",
        "imageIcon": "https://cumuluson.com/uploads/category/578281626003939.png",
        "headerImage": "https://cumuluson.com/uploads/category/",
        "colorBackground": "white"
    },
    {
        "id": 12,
        "app_order": 11,
        "catId": "", <-- should be a number
        "catName": "Appliance",
        "type": 1,
        "navigateToPage": "Service",
        "imageIcon": "https://cumuluson.com/uploads/category/376691626004097.png",
        "headerImage": "https://cumuluson.com/uploads/category/",
        "colorBackground": "white"
    }

Your parser expects a number for that field, which means it can't deal with an empty string. Make sure that catId is always a number in your json.

Sign up to request clarification or add additional context in comments.

1 Comment

Ahh ! Thank you so much
1

Check whether any property is null for example catId should be string if response is empty string

private String catId;

Comments

0

I got the same error recently and i got it solved when i changed the variable type from int to string.Hope it will help you too.

Change private int catId; to: private String catId;

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.