2017-07-30 118 views
0

我有以下的樹形結構如何獲得根節點的孩子們在火力地堡爲Android

[1]

我需要得到信息的名稱和詳細單獨和他們的孩子。

我已經這樣做了,但不運行和關閉時執行的應用程序:

info = FirebaseDatabase.getInstance().getReference(); 
     info.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for (DataSnapshot infoSnapshot: dataSnapshot.getChildren()) { 
        Log.i(TAG, infoSnapshot.child(info.toString()).getValue(String.class)); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Log.i(TAG, "onCancelled", databaseError.toException()); 
      } 
     }); 

如何解決這個問題?

回答

0

從根節點獲取數據,請使用下面的代碼:

info = FirebaseDatabase.getInstance().getReference(); 
info.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot ds : dataSnapshot.getChildren()) { 
      String child = ds.getKey(); 
      Log.d("TAG", child); 
     } 

    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Log.i(TAG, "onCancelled", databaseError.toException()); 
    } 
}); 

輸出將是:

details 
name 
+0

Alex - 謝謝。但我只需要「名稱」和「細節」。不是他們的孩子。有沒有辦法只得到這個? 基本上,我需要根(myapplicationone-f0887)的孩子,而不是他們的孩子。 – evan

+0

是的。請參閱myupdated答案。 –

0

刪除這條線是沒用的:

mDatabase= FirebaseDatabase.getInstance().getReference(); 

和改變這種像

info = FirebaseDatabase.getInstance().getReference(mDatabase.toString()); 

info = FirebaseDatabase.getInstance().getReference(); 

也這樣:

Log.i(TAG, infoSnapshot.child("root").getValue(String.class));// the root node doesn't exists 
+0

感謝作出更改 – evan

+0

和?它有效嗎? –

+0

沒有。仍然關閉運行該項目 – evan

0

一旦你的數據快照,那麼你就可以很容易地通過接收到的所有數據迭代..

info = FirebaseDatabase.getInstance().getReference(); 
    info.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot infoSnapshot:dataSnapshot.child("details").getChildren()) { 
       Log.i(TAG, infoSnapshot.getValue(String.class)); 
      } 
      for(DataSnapshot infoSnapshot:dataSnapshot.child("name").getChildren()){ 
       Log.i(TAG, infoSnapshot.getValue(String.class)); 
      } 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.i(TAG, "onCancelled", databaseError.toException()); 
     } 
    }); 
+0

這給了我根的孩子的細節。有沒有辦法讓根的孩子? (名稱和詳細信息,不是名稱和詳細信息的子項) – evan

+0

然後,您可以直接使用dataSnapshot.getChildren()獲取根的子項,然後使用它的值。你可以做的一件事是通過打印字符串值來檢查整個數據快照,然後你可以訪問數據快照的任何子成員。 –

相關問題