Android 数组列表丢失了特定对象的值

Android 数组列表丢失了特定对象的值,android,arrays,json,Android,Arrays,Json,我创建了一个模型类。它有自己类的数组列表。因为我需要获取无限json对象,但当我在列表中存储该数组时,在获取该特定对象后,它的值显示错误。如何管理这种类型的数组列表 下面是我的模型类示例: public class Search { String Value1="",Value2=""; ArrayList<Search> searchArrayList; } 以下是我如何从API中获取值: for (int i = 0; i < jsonDataArray

我创建了一个模型类。它有自己类的数组列表。因为我需要获取无限json对象,但当我在列表中存储该数组时,在获取该特定对象后,它的值显示错误。如何管理这种类型的数组列表

下面是我的模型类示例:

 public class Search {
    String Value1="",Value2="";
    ArrayList<Search> searchArrayList;
}
以下是我如何从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;
}
for(int i=0;i0){
对于(int j=0;j”+j,searchChild.getLabelName()+“->”+searchChild.getQueAnswer());
arrayOptions.add(searchChild);
}
printLog(“tag->arrayOptions->”,String.valueOf(arrayOptions.size());
}
printLog(“标记->”,“-------------------------------”;
}捕获(JSONException e){
e、 printStackTrace();
}
返回阵列选项;
}
这是我的模型类: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()));
}
公共类SearchTemp{
字符串QDetailId=“”、QuestionId=“”、LabelName=“”、SequenceNo=“”、QueAnswer=“”、QType=“”、ScreenName=“”;
ArrayList searchTempArrayList=新建ArrayList();
布尔值=假;
公选{
选举产生的回报;
}
已选择公共无效设置(已选择布尔值){
isSelected=已选择;
}
公共字符串getQDetailId(){
返回QDetailId;
}
公共void setQDetailId(字符串QDetailId){
this.QDetailId=QDetailId;
}
公共字符串getQuestionId(){
返回问题ID;
}
公共void setQuestionId(字符串questionId){
QuestionId=QuestionId;
}
公共字符串getLabelName(){
返回标签名;
}
public void setLabelName(字符串labelName){
LabelName=LabelName;
}
公共字符串getSequenceNo(){
返回序列号;
}
公共无效设置序列号(字符串序列号){
SequenceNo=SequenceNo;
}
公共字符串getQueAnswer(){
回答问题;
}
public void setQueAnswer(字符串queAnswer){
QueAnswer=QueAnswer;
}
公共字符串getQType(){
返回QType;
}
公共void setQType(字符串QType){
this.QType=QType;
}
公共字符串getScreenName(){
返回屏幕名称;
}
公共无效设置屏幕名称(字符串屏幕名称){
屏幕名称=屏幕名称;
}
公共ArrayList getSearchTempArrayList(){
printLog(“getSearchTempArrayList”,String.valueOf(searchTempArrayList.size());
返回searchTempArrayList;
}
public void setSearchTempArrayList(ArrayList searchTempArrayList){
this.searchTempArrayList=searchTempArrayList;
printLog(“setSearchTempArrayList”,String.valueOf(searchTempArrayList.size());
}

}

使用helper函数,以便随时递归调用

function populateSearchTemp(SearchTemp searchTemp, JSONArray jsonDataArray)
    for (int i = 0; i < jsonDataArray.length(); i++) { 
    JSONObject jsonObjSearch = jsonDataArray.getJSONObject(i);
    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"))  
       populateSearchTemp(searchTemp.getSearchTempArrayList(), 
       jsonObjSearch.getArray("items"));  

   }
}

使用GSON,更改了模型类别
SearchTemp

  public class SearchTemp {

    @SerializedName("QDetailId")
    String QDetailId;
    @SerializedName("QuestionId")
    String QuestionId;
    @SerializedName("LabelName")
    String LabelName;
    @SerializedName("SequenceNo")
    String SequenceNo;
    @SerializedName("QueAnswer")
    String QueAnswer;
    @SerializedName("QType")
    String QType;
    @SerializedName("ScreenName")
    String ScreenName;
    @SerializedName("items")
    List<SearchTemp> items = new ArrayList<SearchTemp>();
   //getters and setters
}

ArrayList<SearchTemp> searchTempList = new ArrayList<SearchTemp>();
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonArray jArray = parser.parse(arg0.toString()).getAsJsonArray();

for(JsonElement obj : jArray )
{
    SearchTemp  searchTemp = gson.fromJson( obj , SearchTemp .class);
    searchTempList.add(searchTemp);
}
在你的主课上

public static ArrayList<SearchTemp> getSearchTempTreeBreakDown(JSONArray arg0) throws JSONException {

    ArrayList<SearchTemp> searchTempList = new ArrayList<SearchTemp>();
    for(int i = 0; i < arg0.length(); i++){
        JSONObject jsonCategoryObject = arg0.getJSONObject(i);
        SearchTemp searchTemp = new SearchTemp();

        String qDetailId = jsonCategoryObject.getString("QDetailId");
        String questionId = jsonCategoryObject.getString("QuestionId");
        String labelName = jsonCategoryObject.getString("LabelName");
        String sequenceNo = jsonCategoryObject.getString("SequenceNo");
        String queAnswer = jsonCategoryObject.getString("QueAnswer");
        String qType = jsonCategoryObject.getString("QType");
        String screenName = jsonCategoryObject.getString("ScreenName");

        searchTemp.setQDetailId(qDetailId);
        searchTemp.setQuestionId(questionId);
        searchTemp.setLabelName(labelName);
        searchTemp.setSequenceNo(sequenceNo);
        searchTemp.setQueAnswer(queAnswer);
        searchTemp.setQType(qType);
        searchTemp.setQType(screenName);

            //this part should happen over and over again if there is a category[]
            JSONArray categoryArray = new JSONArray(jsonCategoryObject.getString("items"));

            for (int x = 0; x < categoryArray.length(); x++){

                JSONObject jsonProductObject1 = categoryArray.getJSONObject(x);
                // Category is model with the getters and setters method.Please see below class
                Category category = new Category();

                category.setQDetailId(jsonProductObject1.getString("QDetailId"));
                category.setQuestionId(jsonProductObject1.getString("QuestionId"));
                category.setLabelName(jsonProductObject1.getString("LabelName"));
                category.setSequenceNo(jsonProductObject1.getString("SequenceNo"));
                category.setQueAnswer(jsonProductObject1.getString("QueAnswer"));
                category.setQType(jsonProductObject1.getString("QType"));
                category.setScreenName(jsonProductObject1.getString("ScreenName"));

                searchTemp.getItems().add(category);

            }

        searchTempList.add(searchTemp);
    }
    return searchTempList;
}
publicstaticarraylistgetsearchtreebreakdown(JSONArray arg0)抛出JSONException{
ArrayList searchTempList=新建ArrayList();
对于(int i=0;i  public class SearchTemp {

    @SerializedName("QDetailId")
    String QDetailId;
    @SerializedName("QuestionId")
    String QuestionId;
    @SerializedName("LabelName")
    String LabelName;
    @SerializedName("SequenceNo")
    String SequenceNo;
    @SerializedName("QueAnswer")
    String QueAnswer;
    @SerializedName("QType")
    String QType;
    @SerializedName("ScreenName")
    String ScreenName;
    @SerializedName("items")
    List<SearchTemp> items = new ArrayList<SearchTemp>();
   //getters and setters
}

ArrayList<SearchTemp> searchTempList = new ArrayList<SearchTemp>();
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonArray jArray = parser.parse(arg0.toString()).getAsJsonArray();

for(JsonElement obj : jArray )
{
    SearchTemp  searchTemp = gson.fromJson( obj , SearchTemp .class);
    searchTempList.add(searchTemp);
}
public class Category {
  String QDetailId;
  String QuestionId;
  String LabelName;
  String SequenceNo;
  String QueAnswer;
  String QType;
  String ScreenName;

 //getters and setters
}
public static ArrayList<SearchTemp> getSearchTempTreeBreakDown(JSONArray arg0) throws JSONException {

    ArrayList<SearchTemp> searchTempList = new ArrayList<SearchTemp>();
    for(int i = 0; i < arg0.length(); i++){
        JSONObject jsonCategoryObject = arg0.getJSONObject(i);
        SearchTemp searchTemp = new SearchTemp();

        String qDetailId = jsonCategoryObject.getString("QDetailId");
        String questionId = jsonCategoryObject.getString("QuestionId");
        String labelName = jsonCategoryObject.getString("LabelName");
        String sequenceNo = jsonCategoryObject.getString("SequenceNo");
        String queAnswer = jsonCategoryObject.getString("QueAnswer");
        String qType = jsonCategoryObject.getString("QType");
        String screenName = jsonCategoryObject.getString("ScreenName");

        searchTemp.setQDetailId(qDetailId);
        searchTemp.setQuestionId(questionId);
        searchTemp.setLabelName(labelName);
        searchTemp.setSequenceNo(sequenceNo);
        searchTemp.setQueAnswer(queAnswer);
        searchTemp.setQType(qType);
        searchTemp.setQType(screenName);

            //this part should happen over and over again if there is a category[]
            JSONArray categoryArray = new JSONArray(jsonCategoryObject.getString("items"));

            for (int x = 0; x < categoryArray.length(); x++){

                JSONObject jsonProductObject1 = categoryArray.getJSONObject(x);
                // Category is model with the getters and setters method.Please see below class
                Category category = new Category();

                category.setQDetailId(jsonProductObject1.getString("QDetailId"));
                category.setQuestionId(jsonProductObject1.getString("QuestionId"));
                category.setLabelName(jsonProductObject1.getString("LabelName"));
                category.setSequenceNo(jsonProductObject1.getString("SequenceNo"));
                category.setQueAnswer(jsonProductObject1.getString("QueAnswer"));
                category.setQType(jsonProductObject1.getString("QType"));
                category.setScreenName(jsonProductObject1.getString("ScreenName"));

                searchTemp.getItems().add(category);

            }

        searchTempList.add(searchTemp);
    }
    return searchTempList;
}