首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Firebase数据库获取子计数,并将其放到数组列表中

从Firebase数据库获取子计数,并将其放到数组列表中
EN

Stack Overflow用户
提问于 2020-05-20 12:44:00
回答 1查看 276关注 0票数 0

我试图得到"msanID“的计数,但它总是将数字返回为'0‘。我使用一个单独的类(ManageNodeName)记录数据并在列表视图中检索它们。我怀疑错误发生在获取字符串MSAN_NAMESP的方法上。任何线索都可能有帮助。谢谢!

列表视图

代码语言:javascript
复制
databaseNodes = FirebaseDatabase.getInstance().getReference("MSAN List");

@Override
protected void onStart() {
    super.onStart();


    databaseNodes.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            manageNodeList.clear();

            for(DataSnapshot nodesnapshot: dataSnapshot.getChildren()){
                progressDialog.dismiss();

                ManageNodeName manageNodeName = nodesnapshot.getValue(ManageNodeName.class);
                manageNodeList.add(manageNodeName);

                MSAN_NAMESP = manageNodeName.getNodeID();
            }
            ManageNodeList adapter = new ManageNodeList(ManageSelectMSAN.this, manageNodeList);
            manageListViewMSANs.setAdapter(adapter);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });


    query = FirebaseDatabase.getInstance().getReference("MSAN MTCE")
            .orderByChild("msanID")
            .equalTo(MSAN_NAMESP);


    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            int size = (int) dataSnapshot.getChildrenCount();

            ManageNodeName.setCount(size);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-20 18:10:34

数据是从Firebase (和大多数云API)异步加载的。当数据被加载时,您的主代码继续运行,以便用户可以继续使用该应用程序。然后,当数据可用时,使用该数据调用您的onDataChange

这意味着所有需要数据的代码都需要在onDataChange内部或从那里调用。

所以:

代码语言:javascript
复制
databaseNodes.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        manageNodeList.clear();

        for(DataSnapshot nodesnapshot: dataSnapshot.getChildren()){
            progressDialog.dismiss();

            ManageNodeName manageNodeName = nodesnapshot.getValue(ManageNodeName.class);
            manageNodeList.add(manageNodeName);

            MSAN_NAMESP = manageNodeName.getNodeID();

            query = FirebaseDatabase.getInstance().getReference("MSAN MTCE")
                    .orderByChild("msanID")
                    .equalTo(MSAN_NAMESP);

            query.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    int size = (int) dataSnapshot.getChildrenCount();

                    ManageNodeName.setCount(size);
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    throw databaseError.toException(); // never ignore errors
                }
            });

        }
        ManageNodeList adapter = new ManageNodeList(ManageSelectMSAN.this, manageNodeList);
        manageListViewMSANs.setAdapter(adapter);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // never ignore errors
    }
});

更长的示例请参见:getContactsFromFirebase()方法返回空列表,以及其他方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61913447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档