2017-10-08 3 views
0

Click here to see the Database자식 참조

나는 단지 내가 목록에 저장할 수 있습니다 활동을 ID1과 ID2를 검색 할 수 있습니다. 그러나, 나는이 작업을 수행하고 마지막 라인은 전체 개체

{Category 1={name=joy, Sprint={Activities={id2=23r90u9329r, 
id1=jf92jf943jf94j3f9}, startingDate =08092017, sprintOverallScore=1, 
Ending Date=08092017, Number of Weeks=2}} 

를 참조 반환 어떻게 그냥 Activities={id2=23r90u9329r, id1=jf92jf943jf94j3f9}

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 


     //getting the reference of artists node 
     databaseCategories = FirebaseDatabase.getInstance().getReference("Categories"); 


databaseCategories.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       //clear the list 
       currentCategories.clear(); 

       //iterate through all the node 
       for(DataSnapshot postsnapshot: dataSnapshot.getChildren()){ 


        //Category j = postsnapshot.getValue(Category.class); 

        System.out.println("test: " + postsnapshot.getValue()); 
이 같은 2 데이터베이스 참조를 만드는 시도하지만 NULL 반환 것

얻을 수 있습니다 :

DatabaseReference databaseCategories, databaseCategories2; 

      .... 


databaseCategories.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       //clear the list 
       currentCategories.clear(); 

       //iterate through all the node 
       for(DataSnapshot postsnapshot: dataSnapshot.getChildren()){ 

        String g = postsnapshot.getKey(); //get the id 

        databaseCategories2 = FirebaseDatabase.getInstance().getReference("CategoryNew").child(g+"").child("Category 1").child("Sprint").child("Activities"); 


        databaseCategories2.addValueEventListener(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 

          System.out.println("test new: " + dataSnapshot.getValue()); //returning NULL 

         } 

         @Override 
         public void onCancelled(DatabaseError databaseError) { 

         } 
        }); 
+1

질문에 JSON 트리 그림이 포함되었습니다. 실제 JSON을 텍스트로 바꾸십시오. [Firebase 데이터베이스 콘솔] (https://console.firebase.google.com/project/_/database/data/)에서 JSON 내보내기 링크를 클릭하면 쉽게 얻을 수 있습니다. . JSON을 텍스트로 사용하면 검색이 가능해 지므로 실제 데이터로 테스트하고이를 사용하여 쉽게 답변 할 수 있습니다. 일반적으로 할 일은 단지 좋은 일입니다. –

답변

0

/Categories에 수신자를 연결하면 onDataChangedataSnapshot과 함께 호출됩니다. 그것 아래의 완전한 가치. 당신은 하나의 레벨 아래로 당신의 자녀를 반복하지만, 귀하의 postSnapshot은 여전히 ​​hsdhs... 아래의 전체 데이터입니다. 당신은 활동에 도착, 너무 코드에서 스냅 샷의 나머지 부분을 탐색해야합니다 :

databaseCategories = FirebaseDatabase.getInstance().getReference("Categories"); 

databaseCategories.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     //iterate through the categories 
     for(DataSnapshot categorySnapshot: dataSnapshot.getChildren()){ 
      DataSnapshot activitiesSnapshot = categorySnapshot.child("Category1/Sprint/Activities"); 
      for(DataSnapshot activitySnapshot: activitiesSnapshot.getChildren()){ 
       System.out.println(activitySnapshot.getKey()+": "+activitySnapshot.getValue(String.class)); 
      } 
     } 
    } 

    ... 

참고이 작성해야하는 코드의 양 및 양 모두에서 매우 낭비입니다 검색된 데이터의 당신이 범주에 대한 활동을 찾을 앱에서 일반적인 사용 사례가있는 경우, 최상위 목록으로 그 저장 고려해 더 쉽게 당신이 필요로 정확하게 데이터를 읽을 수있는이 구조로

CategoryActivities 
    CategoryId 
    ActivityId1: "value 1" 
    ActivityId2: "value 2" 

을, 데이터 전송과 깊이 중첩 된 코드를 절약 할 수 있습니다.

+0

팁을 주셔서 감사합니다. 중첩 루프에 대해서는 사실이므로 끝낼 것입니다. 다시 한번 감사드립니다. – Lazaro

+0

내 대답이 유용하다면 왼쪽에있는 upvote 버튼을 클릭하십시오. 질문에 답한 경우 체크 표시를 클릭하십시오. 그런 식으로 다른 사람들은 당신이 (충분히) 도움을 받았다는 것을 알게됩니다. –

+0

예 이미 저도 평판이 좋았지 만 피드백을 기록 할 수는 없지만 감사합니다. 감사합니다. – Lazaro

관련 문제