如何获取和存储它以在Android的数组中对数组进行可变?

问题描述 投票:0回答:4

我正在尝试将响应存储在模型中,但是如果值在另一个数组中,该如何获取呢?我的反应让我有些困惑。这是响应的外观。

{
  "data": [
    {
      "id": "1",
      "directory_name": "Directory 1",
      "details": [
        {
          "sub_directory_name": "Sub Directory 1",
          "address": "sub",
          "email": [
            {
              "key": 0,
              "value": "123"
            }
          ],
          "contact_no": [
            {
              "key": 0,
              "value": "123"
            }
          ],
          "description": ""
        },
        {
          "sub_directory_name": "Sub Directory 2",
          "address": "National",
          "email": [
            {
              "key": 0,
              "value": "123"
            }
          ],
          "contact_no": [
            {
              "key": 0,
              "value": "123"
            }
          ],
          "description": ""
        },
        {
          "sub_directory_name": "Sub Directory 3",
          "address": "Syb",
          "email": [
            {
              "key": 0,
              "value": "123"
            },
            {
              "key": 1,
              "value": "123"
            }
          ],
          "contact_no": [
            {
              "key": 0,
              "value": "123"
            },
            {
              "key": 1,
              "value": "123"
            }
          ],
          "description": ""
        },
        {
          "sub_directory_name": "Sub Directory 4",
          "address": "Sub",
          "email": [
            {
              "key": 0,
              "value": "123"
            },
            {
              "key": 1,
              "value": "123"
            },
            {
              "key": 2,
              "value": "(123"
            }
          ],
          "contact_no": [
            {
              "key": 0,
              "value": "123"
            },
            {
              "key": 1,
              "value": "123"
            },
            {
              "key": 2,
              "value": "123"
            }
          ],
          "description": ""
        }
      ]
    },
    {
      "id": "2",
      "directory_name": "Directory 2",
      "details": [
        {
          "sub_directory_name": "Sub Directory 2",
          "address": "Sub",
          "email": [
            {
              "key": 0,
              "value": "test"
            }
          ],
          "contact_no": [
            {
              "key": 0,
              "value": "test"
            },
            {
              "key": 1,
              "value": "test"
            }
          ],
          "description": ""
        },
        {
          "sub_directory_name": "Sub Directory 3",
          "address": "test",
          "email": [
            {
              "key": 0,
              "value": "tset"
            }
          ],
          "contact_no": [
            {
              "key": 0,
              "value": "test"
            },
            {
              "key": 1,
              "value": "test"
            },
            {
              "key": 2,
              "value": "test"
            }
          ],
          "description": ""
        },
        {
          "sub_directory_name": "Sub Directory 3",
          "address": "test",
          "email": [
            {
              "key": 0,
              "value": "test"
            }
          ],
          "contact_no": [
            {
              "key": 0,
              "value": "test"
            }
          ],
          "description": ""
        }
      ]
    }
  ]
}

看起来真的很复杂。我需要将emailcontact_no移至details

这是我目前拥有的代码。

我正在使用齐射。

        CustomRequest stringRequest = new CustomRequest(Request.Method.POST, WebConfig.directories, null,
                new Response.Listener<JSONObject>()
                {
                    @Override
                    public void onResponse(JSONObject response)
                    {

                        try {

                            JSONArray details = response.getJSONArray("data");

                            for (int i=0; i<details.length(); i++) {

                                JSONObject object = details.getJSONObject(i);

                                directoryList.add(new DirectoryModel(
                                        object.getInt("id"),
                                        object.getString("directory_name"),
                                        object.getString("sub_directory_name"),
                                        object.getString("address"),
                                        object.getString("email"),
                                        object.getString("contact_no"),
                                        object.getString("description")
                                ));


                                adapter.notifyDataSetChanged();
                                directoryRecyclerView.setVisibility(View.VISIBLE);

                            }


                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {

            }
        })

我知道我的代码仍然无效,如何通过我的代码实现我所遇到的问题。任何帮助将不胜感激。

java android android-volley
4个回答
0
投票

对于电子邮件和联系方式,您需要先获取它们的值,然后将它们存储到JSON数组中。

 directoryList.add(new DirectoryModel(
                                    object.getInt("id"),
                                    object.getString("directory_name"),
                                    object.getString("sub_directory_name"),
                                    object.getString("address"),                                        
object.getJSONArray("email").getJSONObject(0).getString("value"),
object.getJSONArray("contact_no").getJSONObject(0).getString("value"), 
                                    object.getString("description")
                            ));

如您的JSON中所示,这是您希望两个电子邮件都来自单个JSON对象的电子邮件的数组,因此您还需要为索引2编写代码,也可以为此使用循环。


0
投票
  • 尝试这个可能会对您有所帮助
  • 首先创建包含详细信息的模型或pojo类

    Details.class //模型或pojo类

    public class Details {
    
    String sub_directory_name;
    String address;
    ArrayList<Email> emailArrayList;
    ArrayList<ContactNo> contactNoArrayList;
    
    public String getSub_directory_name() {
        return sub_directory_name;
    }
    
    public void setSub_directory_name(String sub_directory_name) {
        this.sub_directory_name = sub_directory_name;
    }
    
    public String getAddress() {
        return address;
    }
    
    public void setAddress(String address) {
        this.address = address;
    }
    
    public ArrayList<Email> getEmailArrayList() {
        return emailArrayList;
    }
    
    public void setEmailArrayList(ArrayList<Email> emailArrayList) {
        this.emailArrayList = emailArrayList;
    }
    
    public ArrayList<ContactNo> getContactNoArrayList() {
        return contactNoArrayList;
    }
    
    public void setContactNoArrayList(ArrayList<ContactNo> contactNoArrayList) {
        this.contactNoArrayList = contactNoArrayList;
    }
    }
    

-在上述模型或pojo类中,您需要声明另外两个ContactNo和Email的模型或pojo类。

Email.class //电子邮件模型或pojo类

public class Email {

String key;
String value;

public String getKey() {
    return key;
}

public void setKey(String key) {
    this.key = key;
}

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}   
}

ContactNo.class // contactno模型或pojo类

public class ContactNo {

String key;
String value;

public String getKey() {
    return key;
}

public void setKey(String key) {
    this.key = key;
}

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}

}
  • 然后您必须调用api,然后首先声明第一个包含Details的arraylist,然后在该for循环中调用for循环,您必须存储数据。

    ArrayList<Details> detailsArrayList = new ArrayList<>();
    
    //your detail Jsonarray for loop
    //then
    
    Details details = new Details();
    details.setAddress("");
    details.setSub_directory_name("");
    
    //for loop of contactNo
    
    ArrayList<ContactNo>contactNoArrayList = new ArrayList<>();
    ContactNo contactNo = new ContactNo();
    contactNo.setKey("");
    contactNo.setValue("");
    details.setContactNoArrayList(contactNoArrayList); //Your COntact ArrayList
    
    //for loop of email
    ArrayList<Email> emailArrayList = new ArrayList<>();
    Email email = new Email();
    email.setKey("");
    email.setValue("");
    details.setEmailArrayList(emailArrayList);//Your Email Arraylist
    
    //for loop complete
    
    //then add
    
    detailsArrayList.add(details);
    

0
投票

您可以使用POJO Generator1POJO Generator2将JSON数据转换为Java中的POJO类。之后,您可以解析Dhaval指定的JSON数据。


0
投票

尝试下面的代码可能会对您有所帮助

CustomRequest stringRequest = new CustomRequest(Request.Method.POST, WebConfig.directories, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        try {

                            JSONArray details = response.getJSONArray("data");

                            for (int i = 0; i < details.length(); i++) {
                                int id = 0;
                                String directory_name = "";
                                try {
                                    JSONObject dataObject = details.getJSONObject(i);
                                    if (dataObject.has("id")) {
                                        id = dataObject.getInt("id");
                                    }
                                    if (dataObject.has("directory_name")) {
                                        directory_name = dataObject.getString("directory_name");
                                    }
                                    if (dataObject.has("details")) {
                                        JSONArray arraySubData = dataObject.getJSONArray("details");
                                        for (int pos = 0; pos < details.length(); pos++) {
                                            JSONObject subDataObj = arraySubData.getJSONObject(pos);
                                            String sub_directory_name = "";
                                            String address = "";
                                            String email = "";
                                            String contact_no = "";
                                            String description = "";
                                            if (subDataObj.has("sub_directory_name")) {
                                                sub_directory_name = subDataObj.getString("sub_directory_name");
                                            }
                                            if (subDataObj.has("address")) {
                                                address = subDataObj.getString("address");
                                            }
                                            if (subDataObj.has("description")) {
                                                description = subDataObj.getString("description");
                                            }

                                            if (subDataObj.has("email")) {
                                                JSONArray emailArray = subDataObj.getJSONArray("email");
                                                for (int ke = 0; ke < emailArray.length(); ke++) {
                                                    try {
                                                        if (ke == 0) {
                                                            email = emailArray.getJSONObject(ke).getString("value");
                                                        } else {
                                                            email = email + "," + emailArray.getJSONObject(ke).getString("value");
                                                        }

                                                    } catch (JSONException en) {
                                                        en.printStackTrace();
                                                    }
                                                }
                                            }
                                            if (subDataObj.has("contact_no")) {
                                                JSONArray numberArray = subDataObj.getJSONArray("contact_no");
                                                for (int ke = 0; ke < numberArray.length(); ke++) {
                                                    try {
                                                        if (ke == 0) {
                                                            contact_no = numberArray.getJSONObject(ke).getString("value");
                                                        } else {
                                                            contact_no = contact_no + "," + numberArray.getJSONObject(ke).getString("value");
                                                        }

                                                    } catch (JSONException en) {
                                                        en.printStackTrace();
                                                    }
                                                }
                                            }


                                            directoryList.add(new DirectoryModel(
                                                    object.getInt(id),
                                                    object.getString(directory_name),
                                                    object.getString(sub_directory_name),
                                                    object.getString(address),
                                                    object.getString(email),
                                                    object.getString(contact_no),
                                                    object.getString(description)
                                            ));
                                        }
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }

                            }
                            adapter.notifyDataSetChanged();
                            directoryRecyclerView.setVisibility(View.VISIBLE);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {

            }
        })

如果我将所有已解析的数据放入新对象,则如下所示

[
  {
    "id": 1,
    "directory_name": "Directory 1",
    "sub_directory_name": "Sub Directory 1",
    "address": "sub",
    "email": "123",
    "contact_no": "123",
    "description": ""
  },
  {
    "id": 1,
    "directory_name": "Directory 1",
    "sub_directory_name": "Sub Directory 2",
    "address": "National",
    "email": "123",
    "contact_no": "123",
    "description": ""
  },
  {
    "id": 2,
    "directory_name": "Directory 2",
    "sub_directory_name": "Sub Directory 2",
    "address": "Sub",
    "email": "test",
    "contact_no": "test,test",
    "description": ""
  },
  {
    "id": 2,
    "directory_name": "Directory 2",
    "sub_directory_name": "Sub Directory 3",
    "address": "test",
    "email": "tset",
    "contact_no": "test,test,test",
    "description": ""
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.