Как проанализировать динамическую внутреннюю длину строки ответа отклика массива в retrofit2 - PullRequest
0 голосов
/ 08 июля 2019

У меня возникла странная проблема при анализе ответа json через retrofit2. На самом деле у меня есть родительская категория, которая имеет разные подкатегории, которые могут быть разными (динамическими), но не исправить Одна родительская категория имеет 2 подкатегории, в то время как другие имеют 5 или могут быть 1 подкатегория. Таким образом, ответ приходит в этом отношении.

Я использую библиотеки для модификации и gson для получения ответа json.

Ниже приведен фрагмент кода, который я уже использовал

public class CategoryDetails {

    @SerializedName("icon")
    @Expose
    private String icon;
    @SerializedName("childs")
    @Expose
    private List<ChildCategoryDetail> childList;
    @SerializedName("categories_id")
    @Expose
    private String id;
    @SerializedName("image")
    @Expose
    private String image;
    @SerializedName("categories_name")
    @Expose
    private String name;
    @SerializedName("parent_id")
    @Expose
    private String parentId;
    @SerializedName("total_products")
    @Expose
    private String totalProducts;

    public String getTotalProducts() {
        return totalProducts;
    }

    public void setTotalProducts(String totalProducts) {
        this.totalProducts = totalProducts;
    }

    public List<ChildCategoryDetail> getChildList() {
        return childList;
    }

    public void setChildList(List<ChildCategoryDetail> childList) {
        this.childList = childList;
    }
    public String getId() {
        return id;
    }

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

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getParentId() {
        return parentId;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }


    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }


}

И для его подкатегорий

public class ChildCategoryDetail {


    @SerializedName("icon")
    @Expose
    private String icon;
    @SerializedName("categories_id")
    @Expose
    private String id;
    @SerializedName("image")
    @Expose
    private String image;
    @SerializedName("categories_name")
    @Expose
    private String name;
    @SerializedName("parent_id")
    @Expose
    private String parentId;
    @SerializedName("total_products")
    @Expose
    private String totalProducts;

    public String getTotalProducts() {
        return totalProducts;
    }

    public void setTotalProducts(String totalProducts) {
        this.totalProducts = totalProducts;
    }

    public String getId() {
        return id;
    }

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

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getParentId() {
        return parentId;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }


    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }



}

И логика, где я использую это здесь ниже

// Get CategoriesList from AppContext
        allCategoriesList = ((App) getContext().getApplicationContext()).getCategoriesList();

        int size = allCategoriesList.size();
        allSubCategoriesList = new ArrayList<>();

        // Get SubCategoriesList from AllCategoriesList
        for (int i=0;  i<allCategoriesList.size();  i++) {
            int sizeStr = allCategoriesList.get(i).getChildList().size();
            for (int j=0;j<allCategoriesList.get(i).getChildList().size();j++) {
                allSubCategoriesList.add(allCategoriesList.get(i).getChildList().get(j));
            }

        }

Только из вышеупомянутой логики я могу пройти первый уровень подкатегории, а не внутренний второй или третий и так далее ...

Хорошо, JSON

{
    "success": "1",
    "data": [
        {
            "categories_id": 3,
            "categories_name": "Boy's Clothing",
            "parent_id": 0,
            "image": "images/media/2019/07/yvWJL03110.png",
            "icon": "images/media/2019/07/yvWJL03110.png",
            "vendors_id": 3,
            "total_products": 16,
            "childs": [
                {
                    "categories_id": 22,
                    "categories_name": "Boy Polo shirts",
                    "parent_id": 3,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 4,
                    "childs": [
                        {
                            "categories_id": 48,
                            "categories_name": "Boy Polo Shirts sub-1",
                            "parent_id": 22,
                            "image": "images/media/2019/07/yvWJL03110.png",
                            "icon": "images/media/2019/07/fyprD03510.png",
                            "vendors_id": 5,
                            "total_products": 0
                        },
                        {
                            "categories_id": 49,
                            "categories_name": "Boy Polo Shirts sub-2",
                            "parent_id": 22,
                            "image": "images/media/2019/07/yvWJL03110.png",
                            "icon": "images/media/2019/07/fyprD03510.png",
                            "vendors_id": 5,
                            "total_products": 0
                        }
                    ]
                },
                {
                    "categories_id": 23,
                    "categories_name": "Boy Casual Shirts",
                    "parent_id": 3,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 5
                },
                {
                    "categories_id": 24,
                    "categories_name": "Boy Pants & Jeans",
                    "parent_id": 3,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 4
                },
                {
                    "categories_id": 25,
                    "categories_name": "Boy Shoes",
                    "parent_id": 3,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 3
                }
            ]
        },
        {
            "categories_id": 4,
            "categories_name": "Girl's Clothing",
            "parent_id": 0,
            "image": "images/media/2019/07/yvWJL03110.png",
            "icon": "images/media/2019/07/yvWJL03110.png",
            "vendors_id": 3,
            "total_products": 6,
            "childs": [
                {
                    "categories_id": 26,
                    "categories_name": "Dresses & Rompers",
                    "parent_id": 4,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 3
                },
                {
                    "categories_id": 27,
                    "categories_name": "Shorts & Skirts",
                    "parent_id": 4,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 3
                },
                {
                    "categories_id": 28,
                    "categories_name": "Sweaters",
                    "parent_id": 4,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 0
                }
            ]
        }
    ],
    "message": "Returned all categories.",
    "categories": 2
}

Я хочу пройти весь внутренний уровень, а также я хочу, чтобы продукт соответствовал той категории, к которой относится category_id

1 Ответ

0 голосов
/ 09 июля 2019

Попробуйте этот псевдокод

void main() {

    ArrayList<Object> mainChilds = new ArrayList<Object>();

    /* Replace Object with your pojo */
    ArrayList<Object> allSubCategoriesList = new ArrayList<>();

    allSubCategoriesList.addAll(getSubChilds(mainChilds));
}

ArrayList<Object> getSubChilds(ArrayList<Object> childs){
    /* Replace Object with your pojo */
    ArrayList<Object> subChilds = new ArrayList<>();

    // Get SubCategoriesList from AllCategoriesList
    for (int i = 0; i < childs.size(); i++) {
        //// add the Child to the list is you want
        subChilds.add(childs.get(i));

        /// check the is there are subChilds exists or not
        if(childs.get(i).getSubChilds().size > 0) {
            ///// pass those subchilds to function
            subChilds.addAll(getSubChilds(childs.get(i).getSubChilds()));
        }
    }

    return subChilds;
}
...