仅Firebase实时数据库DataSnapshot读取子级中的最后一个值

问题描述 投票:1回答:2

我在按钮单击内调用addValueEventListener,但是此方法仅读取节点中的最后一项。我想读取节点中的所有子值,这里出了什么问题?

btnorder.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    databaseReference.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            for(DataSnapshot dataSnapshot1:dataSnapshot.getChildren())
                            {
                                SelectedItems si=dataSnapshot1.getValue(SelectedItems.class);
                                si.getItemname();
                                Toast.makeText(MyBookedItems.this, ""+si.getItemname(), Toast.LENGTH_SHORT).show();
                            }
                        }

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

                        }
                    });

                }
        });
java android firebase-realtime-database
2个回答
0
投票

我认为您可以创建一个数组列表并将所有快照数据放入其中,然后可以通过从列表的长度中减去一个,找到具有找到值的列表的最后一个数据。对不起,我的英语不好:(我试图在下面的代码中的解决方案中解释)

    ArrayList<SelectedItems> selectedItems = new ArrayList<SelectedItems>();
for(DataSnapshot dataSnapshot1:dataSnapshot.getChildren())
 {
     SelectedItems si=dataSnapshot1.getValue(SelectedItems.class);
     selectedItems.add(si);
   }
selectedItems.get(selectedItems.size());

0
投票

它读取了所有值,但是我得到的输出是Toast消息,因此我只能看到最后一个值)

© www.soinside.com 2019 - 2024. All rights reserved.