2016-05-30 3 views
0

Я выполняю проект, когда я получаю данные с сервера в формате json. Я получаю данные о данных проектов и задачах.Init Pojo A с данными ошибки Pojo B

Мой проект 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

Я думаю, что ваш код выглядит okey .. !! Вы можете проверить 'tasksArray.length()'? –

+0

Добавьте к примеру данные JSON, которые вы используете в getProjects() – pedrofb

+0

. Новая задача создана, но в строке new Project (...) я думаю, что она не сохраняется. – MAOL

ответ

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)); 
    } 
Смежные вопросы