从Firebase数据库中获取子代数,并将其放在一个数组列表中。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Firebase数据库中获取子代数,并将其放在一个数组列表中。相关的知识,希望对你有一定的参考价值。

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

My Firebase Parent "MSAN MTCE"

列表视图

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


答案

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

这意味着,所有需要数据的代码,都需要被称为 里面 onDataChange 或从那里被召唤。

所以。

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()方法会返回一个空列表 更长的例子,以及其他方法。

以上是关于从Firebase数据库中获取子代数,并将其放在一个数组列表中。的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 按值获取子名称并将其删除

从firebase获取数据并将其返回到主线程[重复]

如何从 Firebase Firestore 获取数据并将其存储在列表中以在颤振小部件中使用?

尝试获取 Firebase 云数据库数据并将其显示在 RecyclerView 中的片段中

从 Firebase 检索位置并将标记放在谷歌地图上

从 OWIN Cookie 获取不记名令牌并将其放在 API 请求中