0

I'm doing a project in with I'm retrieving data from a server in json format. I'm getting projects data and tasks data.

My project 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...

Task 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...

I'm getting the data and parsing it with the next method, but when I'm trying to load the tasks of one of the project, the arraylist of the task inside each project is empty. Why?? I'm initializing something wrong?

Method:

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;
    }
Víctor Martín
  • 3,352
  • 7
  • 48
  • 94

1 Answers1

1

A constructor problem, I didn't see it. You are invoking tasks.clear() after constructor, so the variable is cleaned (it is a pointer)

projects.add(new Project(project_Id, project_Name, tasks));
tasks.clear();

This is the good modification.

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));
    }
pedrofb
  • 37,271
  • 5
  • 94
  • 142
Víctor Martín
  • 3,352
  • 7
  • 48
  • 94