нахождение в массиве, если конкретные поля существуют или нет - PullRequest
0 голосов
/ 13 февраля 2019

Это мой API

{}JSON
[]products
{}0
product-name : "Fiting"
product-id : "1"
product-description : "Door"
product-image : "https://image/logo.jpg"
product-categoryid : "2"
category-name : "Furniture"
{}1
product-name : "Bathroom"
product-id : "2"
product-description : "Services"
product-image : "https://image/logo.jpg"
product-categoryid : "1"
category-name : "Plumber"
subcategory-id : "1"
subcategory-name : "Bathroom"

subCategoryDetailModelClass.setSubCategoryId (productObject.getInt ("subcategory-id"));subCategoryDetailModelClass.setSubCategoryName (productObject.getString ("subcategory-name"));

я не могу добавить идентификатор подкатегории, имя подкатегории в моем массиве, так как он недоступен в 0-й позиции .....so как проверить условие, что если в api subcategory-id недоступно имя подкатегории, добавьте другие элементы в список

StringRequest stringRequest = new StringRequest(Request.Method.GET,URLs.productURL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("zsded", response.toString());

                        try {

                            JSONObject obj = new JSONObject(response);

                            JSONArray productArray = obj.getJSONArray("products");

                            //now looping through all the elements of the json array
                            for (int i = 0; i < productArray.length(); i++) {

                                JSONObject productObject = productArray.getJSONObject(i);

                                SubCategoryDetailModelClass subCategoryDetailModelClass = new SubCategoryDetailModelClass();


                              //  if(productObject.getInt("subcategory-id"))

                                subCategoryDetailModelClass.setProduct_name(productObject.getString("product-name"));
                                subCategoryDetailModelClass.setProduct_id(productObject.getInt("product-id"));
                                subCategoryDetailModelClass.setProduct_desc(productObject.getString("product-description"));
                                subCategoryDetailModelClass.setProduct_imgURL(productObject.getString("product-image"));
                                subCategoryDetailModelClass.setProduct_CategoryId(productObject.getInt("product-categoryid"));
                                subCategoryDetailModelClass.setProduct_Category_Name(productObject.getString("category-name"));
                                subCategoryDetailModelClass.setSubCategoryId(productObject.getInt("subcategory-id"));
                                subCategoryDetailModelClass.setSubCategoryName(productObject.getString("subcategory-name"));
                                subCategoryListDetailModelClassArray.add(subCategoryDetailModelClass);

                                Log.d("subcatdetail", String.valueOf(subCategoryDetailModelClass));

                            }

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Использовать Opt методы, например,

optInt(String name, int fallback) 

Возвращает значение, отображаемое по имени, если оно существует и является целым или может быть приведено к целому, или наоборот - в противном случае.

Существуют optMethods для в основном примитивных типов данных, отметьте здесь

0 голосов
/ 13 февраля 2019

Используйте этот класс

public class JSONHelper {

    public static String getString(JSONObject json, String tag) throws JSONException {
        if(mJSONValueAvailable(json, tag)) {
            return json.getString(tag);
        }

        return "";
    }

    public static int getInt(JSONObject json, String tag) throws JSONException {
        if(mJSONValueAvailable(json, tag)) {
            if(json.get(tag) instanceof String) {
                if(json.getString(tag).equalsIgnoreCase("None")) {
                    return -1;
                }
                if(!json.getString(tag).equals("")) {
                    return Integer.parseInt(json.getString(tag));
                } else {
                    return -1;
                }

            }
            return json.getInt(tag);
        }

        return -1;
    }

    public static boolean getBoolean(JSONObject json, String tag) throws JSONException {
        if(mJSONValueAvailable(json, tag)) {
            Object value = json.get(tag);

            if(value instanceof String) {
                return PrimitiveHelper.StringToBoolean((String) value);
            } else if (value instanceof Integer) {
                return PrimitiveHelper.IntegerToBoolean((int)value);
            }

            return json.getBoolean(tag);
        }
        return false;
    }


    public static Boolean getBooleanBoxed(JSONObject json, String tag) throws JSONException {
        if(mJSONValueAvailable(json, tag)) {
            Object value = json.get(tag);

            if(value instanceof String) {
                return PrimitiveHelper.StringToBooleanBoxed((String) value);
            } else if (value instanceof Integer) {
                return PrimitiveHelper.IntegerToBooleanBoxed((int) value);
            }

            return json.getBoolean(tag);
        }
        return null;//false;
    }

    private static boolean mJSONValueAvailable(JSONObject json, String tag) {
        return json.has(tag) && !json.isNull(tag);
    }

//    private static Boolean mJSONValueAvailableBoxed(JSONObject json, String tag) {
//        return json.has(tag) && !json.isNull(tag);//
//    }


    public static JSONArray sortJsonArray(JSONArray array, String sort) {

        final String sortKey = sort;
        //Logger.d("sortJSONArray by::: " + sortKey);

        List<JSONObject> jsons = new ArrayList<JSONObject>();

        try {
            for (int i = 0; i < array.length(); i++) {
                jsons.add(array.getJSONObject(i));
            }
            Collections.sort(jsons, new Comparator<JSONObject>() {
                @Override
                public int compare(JSONObject lhs, JSONObject rhs) {
                    try {
                        String lid = lhs.getString(sortKey);
                        String rid = rhs.getString(sortKey);
                        // Here you could parse string id to integer and then compare.
                        return lid.compareTo(rid);
                    } catch (JSONException e) {
                        e.printStackTrace();

                    }
                    return 0;
                }
            });

        } catch (JSONException e) {
            e.printStackTrace();
        }

        return new JSONArray(jsons);

    }
}

Назовите это следующим образом

subCategoryDetailModelClass.setProduct_name(JSONHelper.getString(productObject, "product-name"));
                    subCategoryDetailModelClass.setProduct_id(JSONHelper.getInt(productObject,"product-id"));
                    subCategoryDetailModelClass.setProduct_desc(JSONHelper.getString(productObject, "product-description"));
                    subCategoryDetailModelClass.setProduct_imgURL(JSONHelper.getString(productObject, "product-image"));
                    subCategoryDetailModelClass.setProduct_CategoryId(JSONHelper.getInt(productObject,"product-categoryid"));
                    subCategoryDetailModelClass.setProduct_Category_Name(JSONHelper.getString(productObject, "category-name"));
                    subCategoryDetailModelClass.setSubCategoryId(JSONHelper.getInt(productObject, "subcategory-id"));
                    subCategoryDetailModelClass.setSubCategoryName(JSONHelper.getString(productObject,"subcategory-name"));
                    subCategoryListDetailModelClassArray.add(subCategoryDetailModelClass);
...