I have created one model class. Which has array list of its own class. Because i need to fetch infinite json object.But when i store that array in my list and after getting that particular object its show wrong value. How to manage this type of array list.
Here is my model class example :
 public class Search {
    String Value1="",Value2="";
    ArrayList<Search> searchArrayList;
}
Here is my json example : In which items array has infinite array. It is dynamically end level.If any child has sub child than items[] array comes.
"data": [
    {
        "QDetailId": "",
        "QuestionId": "1",
        "LabelName": "Airtraffic Controller's Role",
        "SequenceNo": "1",
        "QueAnswer": "",
        "QType": "Question",
        "ScreenName": "Scroll_single_selection",
        "items": [
            {
                "QDetailId": "1",
                "QuestionId": "1",
                "TechId": "1",
                "SequenceNo": "1",
                "QueAnswer": "Flight dispatch",
                "QType": "Answer",
                "ScreenName": "",
                "items": [
                    {
                        "QDetailId": "1",
                        "QuestionId": "2",
                        "LabelName": "Flight Dispatch Training",
                        "SequenceNo": "2",
                        "QueAnswer": "",
                        "QType": "Question",
                        "ScreenName": "Tab_multi_selection",
                        "items": [
                            {
                                "QDetailId": "7",
                                "QuestionId": "2",
                                "TechId": "1",
                                "SequenceNo": "2",
                                "QueAnswer": "ICAO 7192 syllabus",
                                "QType": "Answer",
                                "ScreenName": ""
                            },
                            {
                                "QDetailId": "8",
                                "QuestionId": "2",
                                "TechId": "1",
                                "SequenceNo": "2",
                                "QueAnswer": "FAA Airmen certificate - flight dispatcher",
                                "QType": "Answer",
                                "ScreenName": ""
                            }
                        ]
                    }
                ]
            },
Here is how i am getting values from API:
for (int i = 0; i < jsonDataArray.length(); i++) {
                                    JSONObject jsonObjSearch = jsonDataArray.getJSONObject(i);
                                    SearchTemp searchTemp = new SearchTemp();
                                    searchTemp.setQDetailId(jsonObjSearch.getString("QDetailId"));
                                    searchTemp.setQuestionId(jsonObjSearch.getString("QuestionId"));
                                    searchTemp.setLabelName(jsonObjSearch.getString("LabelName"));
                                    searchTemp.setSequenceNo(jsonObjSearch.getString("SequenceNo"));
                                    searchTemp.setQueAnswer(jsonObjSearch.getString("QueAnswer"));
                                    searchTemp.setQType(jsonObjSearch.getString("QType"));
                                    searchTemp.setScreenName(jsonObjSearch.getString("ScreenName"));
                                    if (jsonObjSearch.has("items")) {
                                        searchTemp.setSearchTempArrayList(getChildValues(jsonObjSearch));
                                    }
                                    searchFilterArrayList.add(searchTemp);
                                }
ArrayList<SearchTemp> getChildValues(JSONObject jsonObjSearch) {
    ArrayList<SearchTemp> arrayOptions = new ArrayList<SearchTemp>();
    try {
        JSONArray jsonItemArray = jsonObjSearch.getJSONArray("items");
        if (jsonItemArray.length() > 0) {
            for (int j = 0; j < jsonItemArray.length(); j++) {
                JSONObject jsonItems = jsonItemArray.getJSONObject(j);
                SearchTemp searchChild = new SearchTemp();
                searchChild.setQDetailId(jsonItems.getString("QDetailId"));
                searchChild.setQuestionId(jsonItems.getString("QuestionId"));
                if (jsonItems.has("LabelName")) {
                    searchChild.setLabelName(jsonItems.getString("LabelName"));
                }
                searchChild.setSequenceNo(jsonItems.getString("SequenceNo"));
                searchChild.setQueAnswer(jsonItems.getString("QueAnswer"));
                searchChild.setQType(jsonItems.getString("QType"));
                searchChild.setScreenName(jsonItems.getString("ScreenName"));
                if (jsonItems.has("items")) {
                    searchChild.setSearchTempArrayList(getChildValues(jsonItems));
                }
                Utility.printLog("Child->" + j, searchChild.getLabelName() + "->" + searchChild.getQueAnswer());
                arrayOptions.add(searchChild);
            }
            Utility.printLog("tag->arrayOptions->", String.valueOf(arrayOptions.size()));
        }
        Utility.printLog("tag->", "-----------------------------");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return arrayOptions;
}
Here is my Model class : SearchTemp.java
public class SearchTemp {
String QDetailId="",QuestionId="",LabelName="",SequenceNo="",QueAnswer="",QType="",ScreenName="";
ArrayList<SearchTemp> searchTempArrayList=new ArrayList<>();
boolean isSelected=false;
public boolean isSelected() {
    return isSelected;
}
public void setSelected(boolean selected) {
    isSelected = selected;
}
public String getQDetailId() {
    return QDetailId;
}
public void setQDetailId(String QDetailId) {
    this.QDetailId = QDetailId;
}
public String getQuestionId() {
    return QuestionId;
}
public void setQuestionId(String questionId) {
    QuestionId = questionId;
}
public String getLabelName() {
    return LabelName;
}
public void setLabelName(String labelName) {
    LabelName = labelName;
}
public String getSequenceNo() {
    return SequenceNo;
}
public void setSequenceNo(String sequenceNo) {
    SequenceNo = sequenceNo;
}
public String getQueAnswer() {
    return QueAnswer;
}
public void setQueAnswer(String queAnswer) {
    QueAnswer = queAnswer;
}
public String getQType() {
    return QType;
}
public void setQType(String QType) {
    this.QType = QType;
}
public String getScreenName() {
    return ScreenName;
}
public void setScreenName(String screenName) {
    ScreenName = screenName;
}
public ArrayList<SearchTemp> getSearchTempArrayList() {
    Utility.printLog("getSearchTempArrayList",String.valueOf(searchTempArrayList.size()));
    return searchTempArrayList;
}
public void setSearchTempArrayList(ArrayList<SearchTemp> searchTempArrayList) {
    this.searchTempArrayList = searchTempArrayList;
    Utility.printLog("setSearchTempArrayList",String.valueOf(searchTempArrayList.size()));
}
}
 
     
    