【问题标题】:How to get the child name in Firebase Android如何在 Firebase Android 中获取子名称
【发布时间】:2017-09-25 17:34:16
【问题描述】:

我正在尝试获取唯一的子名称,但它总是返回相同的 ID,或者它返回我在子引号中输入的内容。

uid 持有“用户”而不是进入用户

我试图在 users 下获取子名称,这是长键/字符串:

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);
}}

【问题讨论】:

  • @jdv 当我输入 .getKey() 我只得到外键(第一个孩子)而不是用户键(用户是第一个孩子的孩子)
  • 你显然需要不同的方法
  • 不要粘贴文字图片。而是将实际代码或 JSON 作为文本发布。对于 JSON,您可以通过单击 your Firebase Database console 中的导出 JSON 链接轻松获取此信息。将 JSON 和代码作为文本使其可搜索,使我们能够轻松地使用它来测试您的实际数据并在我们的答案中使用它,通常只是一件好事。
  • @Chisko 有什么建议吗?

标签: android firebase firebase-realtime-database


【解决方案1】:

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.....>

}

} }

数据库节点的层次结构:很遗憾,我无法添加平面快照 - 所以请参考我答案开头的链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多