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()));
}
}