2017-09-22 61 views
0

我試圖獲取獨特的兒童名稱,但其始終返回相同的ID,或者它返回了我爲兒童引用的內容。如何在Firebase中獲取兒童名稱Android

UID保持「用戶」而不是行駛到用戶 uid hold "users" instead of traveling into users

我試着讓孩子名下的用戶這是長鍵/字符串: Im trying to get the child name under users which is the long key/string

public class displayUserBooks extends AppCompatActivity { 

ListView listViewBooks; 
List<existingBooks> existingBookses; 
private FirebaseAuth mAuth; 
FirebaseDatabase databaseViewbooks = FirebaseDatabase.getInstance(); 
DatabaseReference myRef = databaseViewbooks.getReference("Books"); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_user_books); 
    mAuth = FirebaseAuth.getInstance(); 
    FirebaseUser user = mAuth.getCurrentUser(); 
    listViewBooks= (ListView) findViewById(R.id.listViewBooks); 
    existingBookses = new ArrayList<>(); 


} 
@Override 
protected void onStart() { 
    super.onStart(); 
    myRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      checkBooks(dataSnapshot); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 

private void checkBooks(DataSnapshot dataSnapshot) { 
    for (DataSnapshot ds : dataSnapshot.getChildren()) { 
     mAuth = FirebaseAuth.getInstance(); 
     FirebaseUser user = mAuth.getCurrentUser(); 
     String uid=ds.child("users").getKey(); 
     existingBooks eBooks = new existingBooks(); 
     eBooks = ds.getValue(existingBooks.class); 
     // if(user.getUid().equals(uid)) 
      existingBookses.add(eBooks); 
    } 

    Booklist adapter = new Booklist(displayUserBooks.this,existingBookses); 
    listViewBooks.setAdapter(adapter); 
}} 
+0

重複? https://stackoverflow.com/q/40101010/1531971 – jdv

+0

@jdv當我鍵入.getKey()我只拿到外鍵(第一個孩子),而不是用戶鍵(用戶是第一個孩子的孩子) –

+0

你顯然需要不同的方法 – Chisko

回答

0

enter image description here的根本原因最有可能是在構建對子節點的引用。它可能被定義爲「太深」。請參閱DB樹的分層圖片快照,以及下面的工作代碼部分。在監聽器裏,它的傳播到每個用戶的數據(用戶ID定義):

FirebaseDatabase frDb = FirebaseDatabase.getInstance(); 
     DatabaseReference frDbRef = frDb.getReference("apps/gastracking").child("users").child(mAuth.getCurrentUser().getUid()); 
     ChildEventListener chEvLst = frDbRef.addChildEventListener(new ChildEventListener() { 
      ArrayList<RawReport> listOfRawreports = new ArrayList<RawReport>(); 

      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
       if (dataSnapshot.getChildrenCount() > 0) { 
        for (DataSnapshot ds1 : dataSnapshot.getChildren()) 

//<...... Put your code here.....> 

} 

} }

的DB節點的層次結構:很遺憾,我不能加平快照 - 所以請參閱我答案開頭的鏈接。