简体   繁体   中英

JsonSyntaxException: java.lang.NumberFormatException: empty String

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.

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

private String catId;

There are multiple entries where catId is an empty string, eg:

{
        "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.

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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM