我正在做一个项目,我正在以json格式从服务器检索数据。我正在获取项目数据和任务数据。
我的项目pojo:
public class Project implements Serializable{
private String project_Name;
private String project_Id;
private ArrayList<Task> tasks;
public Project() {
}
public Project(String project_Id, String project_Name, ArrayList<Task> tasks) {
this.project_Id = project_Id;
this.project_Name = project_Name;
this.tasks = tasks;
}
setters and getters...
任务pojo:
public class Task implements Serializable{
private String task_Name;
private int task_Id;
private String task_item;
private String task_item_tag;
public Task() {
}
public Task(int task_Id, String task_Name, String task_item, String task_item_tag) {
this.task_Name = task_Name;
this.task_Id = task_Id;
this.task_item = task_item;
this.task_item_tag= task_item_tag;
}
getters and setters...
我正在获取数据并使用下一个方法解析它,但是当我尝试加载其中一个项目的任务时,每个项目中任务的arraylist都是空的。为什么??我在初步说错了什么?
方法:
private ArrayList<Project> getProjects(String JSONresponse) {
ArrayList<Project> projects = new ArrayList<>();
ArrayList<Task> tasks = new ArrayList<>();
try {
JSONObject projectObject = new JSONObject(JSONresponse);
JSONArray projectsArray = projectObject.getJSONArray("data");
for (int i = 0; i < projectsArray.length(); i++) {
JSONObject objProject = projectsArray.getJSONObject(i);
String project_Id = objProject.getString("project_Id");
String project_Name = objProject.getString("project_Name");
//projects.add(new Project(project_Name, project_Id, null));
JSONArray tasksArray = objProject.getJSONArray("tasks");
for (int j = 0; j < tasksArray.length(); j++) {
JSONObject objTasks = tasksArray.getJSONObject(j);
int task_Id = objTasks.getInt("task_Id");
String task_Name = objTasks.getString("task_Name");
String task_item= "";
if (objTasks.has("task_item")) {
task_item+= objTasks.getString("task_item");
}
String task_item_tag= "";
if (objTasks.has("task_item_tag")) {
task_item_tag+= objTasks.getString("task_item_tag");
}
tasks.add(new Task(task_Id, task_Name, task_item, task_item_tag));
}
projects.add(new Project(project_Id, project_Name, tasks));
tasks.clear();
tasks = new ArrayList<>();
}
return projects;
} catch (JSONException e) {
Log.e("REQ_PROJ_TASK", e.getMessage());
}
return null;
}
答案 0 :(得分:1)
构造函数问题,我没有看到它。你在构造函数之后调用tasks.clear(),所以变量被清理(它是一个指针)
projects.add(new Project(project_Id, project_Name, tasks));
tasks.clear();
这是一个很好的修改。
public Project(String project_Id, String project_Name, ArrayList<Task> tasks) {
super();
this.project_Id = project_Id;
this.project_Name = project_Name;
this.tasks = new ArrayList<>();
for(int i = 0; i < tasks.size(); i++)
this.tasks.add(tasks.get(i));
}