2017-01-22 1 views
0

CourseCardModelオブジェクトのArrayListを構築して、スワイプカードスタイルのビューを生成するためにアダプタにフィードしようとしています。Java ArrayListがFirebase経由で構築された後で不思議な動作をする

データは、Firebaseリアルタイムデータベースから取得され、generateCourseCards()メソッド内のOnDataChange()リスナーでコンパイルされています。私は、カスタムCourseオブジェクトとしてオブジェクトをキャストスナップショットごとに

、私は、Courseのメンバ変数にアクセスCardModelオブジェクトにCourseオブジェクトを添付し、その後にそのCourseModelオブジェクトを追加することができますチェックするために、コンソールに一部の情報を印刷a CourseCardModelList

ループはデータスナップショットを処理するので、オブジェクトを正しくキャストしてリストに追加していることがわかります。しかし、ループの最後に、を繰り返して、CourseName変数を印刷すると、リスト内のすべてのCourseがリストに追加された最後のCourseに設定されているように見えます。

ループの後で最後のコースにすべてのエントリを上書きする原因となっているOnDataChange()メソッドの終了前に、ArrayListに何が起きているのかわかりません追加されました。

generateCourses logcat出力方法

private ArrayList<CourseCardModel> generateCourseCards() { 

    courseCardModelList = new ArrayList<CourseCardModel>(); 
    cardModel = new CourseCardModel(); 

    dbref = FirebaseDatabase.getInstance().getReference().child("courses"); 

    // Retrieve the course data from firebase db and cast as Course object 
    dbref.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      Log.e("Count " ,"" + snapshot.getChildrenCount()); 
      int i = 0; 
      for (DataSnapshot postSnapshot: snapshot.getChildren()) { 

       c = postSnapshot.getValue(Course.class); 
       System.out.println("COURSE INFO: " + c.getCourseName()); 

       cardModel.setCourse(c); 

       System.out.println("COURSE INFO FROM CARDMODEL: " + cardModel.getCourse().getCourseName()); 

       courseCardModelList.add(cardModel); 

       System.out.println("COURSE INFO FROM COURSECARDMODELLIST: " + courseCardModelList.get(i).getCourse().getCourseName()); 

       System.out.println("COURSE CARD MODEL LIST SIZE: " + courseCardModelList.size()); 


       i++; 
      } 

      ca.notifyDataSetChanged(); 



      for (int k = 0; k < courseCardModelList.size(); k++) { 
       System.out.println(k + " COURSE INFO LOOP AT END: " + courseCardModelList.get(k).getCourse().getCourseName()); 
      } 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.e("The read failed: ", databaseError.getMessage()); 
     } 

    }); 


    System.out.print("END OF METHOD ARRAY SIZE CHECK: " + courseCardModelList.size()); 

    datapulled = true; 

    return courseCardModelList; 

} 

スニペット最初のループが終了し、第二の貫通反復し:

01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: COURSE INFO: Adult Nursing BN (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: COURSE INFO FROM CARDMODEL: Adult Nursing BN (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: COURSE INFO FROM COURSECARDMODELLIST: Adult Nursing BN (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: COURSE CARD MODEL LIST SIZE: 1686 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: COURSE INFO: Conservation with Forestry BSc (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: COURSE INFO FROM CARDMODEL: Conservation with Forestry BSc (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: COURSE INFO FROM COURSECARDMODELLIST: Conservation with Forestry BSc (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: COURSE CARD MODEL LIST SIZE: 1687 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: COURSE INFO: Mental Health Nursing BN (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: COURSE INFO FROM CARDMODEL: Mental Health Nursing BN (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: COURSE INFO FROM COURSECARDMODELLIST: Mental Health Nursing BN (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: COURSE CARD MODEL LIST SIZE: 1688 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: 0 COURSE INFO LOOP AT END: Mental Health Nursing BN (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: 1 COURSE INFO LOOP AT END: Mental Health Nursing BN (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: 2 COURSE INFO LOOP AT END: Mental Health Nursing BN (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: 3 COURSE INFO LOOP AT END: Mental Health Nursing BN (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: 4 COURSE INFO LOOP AT END: Mental Health Nursing BN (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: 5 COURSE INFO LOOP AT END: Mental Health Nursing BN (Hons) 
01-22 13:13:25.640 18800-18800/coursematch.coursematchuk I/System.out: 6 COURSE INFO LOOP AT END: Mental Health Nursing BN (Hons) 

答えて

2

あなたが単一cardModelインスタンス(cardModel = new CourseCardModel();)を作成しています。それぞれを1つずつ作成する必要がありますpostSnapshot

+0

ジョンあなたはもう一度私の救い主です - あなたの助けをありがとう。 – freshwaterjoe

関連する問題