具有Pojo B错误数据的Init Pojo A.

时间:2016-05-30 11:57:42

标签: android parsing initialization pojo

我正在做一个项目,我正在以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;
    }

1 个答案:

答案 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));
    }