我正在尝试将响应存储在模型中,但是如果值在另一个数组中,该如何获取呢?我的反应让我有些困惑。这是响应的外观。
{
"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": ""
}
]
}
]
}
看起来真的很复杂。我需要将email
和contact_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) {
}
})
我知道我的代码仍然无效,如何通过我的代码实现我所遇到的问题。任何帮助将不胜感激。
对于电子邮件和联系方式,您需要先获取它们的值,然后将它们存储到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编写代码,也可以为此使用循环。
首先创建包含详细信息的模型或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);
您可以使用POJO Generator1或POJO Generator2将JSON数据转换为Java中的POJO类。之后,您可以解析Dhaval指定的JSON数据。
尝试下面的代码可能会对您有所帮助
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": ""
}
]