2016-05-30 21 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... 

我得到的數據,並與下一個方法解析它,但是當我試圖加載的任務項目之一,每個項目內任務的數組列表都是空的。爲什麼??我正在初始化錯誤?

方法:

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

新的任務創建,但在行新項目(...)我認爲它沒有被存儲。 – 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)); 
    }