2017-09-22 104 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节点的层次结构:很遗憾,我不能加平快照 - 所以请参阅我答案开头的链接。