2017-10-08 10 views
0

Click here to see the Database子リファレンス

私だけので、私はリストに保存することができ活動ID1とID2を取得したいです。しかし、私はこれを行うと、最後の行は、私はちょうど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を返していますどのように

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

全体のオブジェクト参照を返します。

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/)の[Export JSON]リンクをクリックすることで簡単に取得できます。 。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。 –

答えて

0

/Categoriesにリスナーを添付しているため、onDataChangedataSnapshotと呼ばれ、その下の完全な値。あなたは1レベル下にあなたの子供をループしますが、あなたの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