2016-05-30 8 views
0

私はプロジェクトを行っています。私はjson形式のサーバーからデータを取得しています。私はプロジェクトのデータとタスクのデータを取得しています。Pojo Bエラーのデータを含むPojo A

マイプロジェクト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... 

私はデータを取得し、次の方法でそれを解析するが、私はのタスクをロードしようとしているときですプロジェクトの1つで、各プロジェクト内のタスクの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

あなたのコードは見た目が似ていると思います!! 'tasksArray.length()'を確認できますか? –

+0

getProjects()で使用しているJSONデータの例に追加 – pedrofb

+0

新しいタスクが作成されますが、new Project(...)行には保存されていないと思います。 – MAOL

答えて

1

コンストラクタの問題、私はそれを見ていません。あなたは

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

は、これは良い修飾である(それがポインタである)コンストラクタの後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)); 
    } 
関連する問題