填充arraylist的arraylist

时间:2018-03-07 09:01:35

标签: android arraylist

我有一个arraylist的arraylist,我想要填充但它不起作用。响应是从服务器获取的。响应如下

[{"QKey":"1234","OptionLabel":"Ground Floor","optionValue":"0"},{"QKey":"5678","OptionLabel":"1st Floor","optionValue":"1"}

我正在尝试获取它,将其添加到arraylist并填充但似乎无法正常工作

这是我的代码

String dropDownResponse=readFromFile(2);
                                             Log.d("Reading from file",dropDownResponse);
                                             JSONArray jsonArray = new JSONArray(dropDownResponse);

                                             formModel.setName(rowLabel);
                                             formModel.setIsMandatory(isMandatory);
                                             formModel.setInputType(inputType);
                                            /* formModel.setName("SAMPLE LABEL");
                                             formModel.setIsMandatory("Y");
                                             formModel.setInputType("selectbox");*/
                                             spinnerList.add(formModel);
                                             spinnerPopulationList.get(spinnerList.size()-1).set(0,rowLabel);
                                             for(int j=0;j<jsonArray.length();j++)
                                             {
                                                 JSONObject jsonObject = jsonArray.getJSONObject(j);
                                                 spinnerRowId=jsonObject.getString("QKey");
                                                 Log.d("QKey",spinnerRowId);
                                                 optionLabel=jsonObject.getString("OptionLabel");
                                                 Log.d("Option Label",optionLabel);
                                                 if(rowId.equals(spinnerRowId))
                                                 {
                                                     spinnerPopulationList.get(spinnerList.size()-1).set(spinnerPopulationList.get(spinnerList.size()-1).size()-1,optionLabel);
                                                 }
                                             }
                                             for(int h=0;h<spinnerPopulationList.get(spinnerList.size()-1).size();h++)
                                             {
                                                 Log.d("spinner item"+rowLabel+"["+h+"]",spinnerPopulationList.get(spinnerList.size()-1).get(h));
                                             }

代码中的这一行显示了indexOutOfBoundException

if(rowId.equals(spinnerRowId))
                                                 {
                                                     spinnerPopulationList.get(spinnerList.size()-1).set(spinnerPopulationList.get(spinnerList.size()-1).size()-1,optionLabel);
                                                 }

1 个答案:

答案 0 :(得分:1)

我认为你不需要二维AllayList来容纳这个json。这只是一个对象数组。您可以使用Gson轻松解析它。

您需要一些响应类,例如

class ResponseObj {
    private String Qkey;
    private String OptionLabel;
    private String optionValue;

    //Constructor(s), getters and setters
}

class Response {
    private ArrayList<ResponseObj> objects = new ArrayList<>();

    //Constructor(s), getters and setters
}

然后你可以使用Gson来解析json并从中创建一个对象。你可以使用这样的东西从服务器获得响应。

Response response = gson.fromJson(YOUR_JSON, Response.class);

for(ResponseObj object : response.getObjects()) {

    //In this loop, you are iterating over each object in your json
    //which looks like
    //{"QKey":"1234","OptionLabel":"Ground Floor","optionValue":"0"}

    doSomething(object);
    doSomethingWithKey(object.getQKey());
}

Here是如何在项目中使用Gson的。