获取childs firebase android的数量,并将所有孩子放入字符串arrayList中
我的孩子列表屏幕截图 我需要获得child的数量(没有嵌套的child!),并将其存储在全局公共变量中。另外,我希望所有的孩子都放在一个字符串数组列表中获取childs firebase android的数量,并将所有孩子放入字符串arrayList中,android,firebase,arraylist,firebase-realtime-database,Android,Firebase,Arraylist,Firebase Realtime Database,我的孩子列表屏幕截图 我需要获得child的数量(没有嵌套的child!),并将其存储在全局公共变量中。另外,我希望所有的孩子都放在一个字符串数组列表中 提前谢谢 使用某种形式的倾听者。对于单个查找,请使用valueEventListener 然后在自动生成的OnDataChange()方法中。使用datasnapshot获取childrenCount,然后通过childrenCount将其添加到列表中 List<String> list = new ArrayList<&g
提前谢谢 使用某种形式的倾听者。对于单个查找,请使用valueEventListener 然后在自动生成的OnDataChange()方法中。使用datasnapshot获取childrenCount,然后通过childrenCount将其添加到列表中
List<String> list = new ArrayList<>();
long childrenCount;
public void getListItems()
{
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
childrenCount = dataSnapshot.child("searchingUsers").getChildrenCount();
for (DataSnapshot snap : dataSnapshot.child("searchingUsers").getChildren())
{
//If you want the node value
list.add(snap.getValue().toString());
//If you want the key value
list.add(snap.getKey());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException(); // don't ignore errors
}
});
}
List List=new ArrayList();
长childrenCount;
public void getListItems()
{
DatabaseReference ref=FirebaseDatabase.getInstance().getReference();
ref.addValueEventListener(新的ValueEventListener()
{
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot)
{
childrenCount=dataSnapshot.child(“searchingUsers”).getChildrenCount();
for(DataSnapshot快照:DataSnapshot.child(“searchingUsers”).getChildren())
{
//如果需要节点值
添加(snap.getValue().toString());
//如果需要键值
添加(snap.getKey());
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
抛出databaseError.toException();//不要忽略错误
}
});
}
这使这两个变量都成为活动中的全局变量。因此,您可以从“活动”中的任何位置访问它们。要获得所有这些随机值的列表,请使用以下代码行:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference searchingUsersRef = rootRef.child("searchingUsers");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String value = ds.getValue(String.class);
list.add(value);
}
//Do what you need to do with your list
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
searchingUsersRef.addListenerForSingleValueEvent(valueEventListener);
DatabaseReference rootRef=FirebaseDatabase.getInstance().getReference();
DatabaseReference searchingUsersRef=rootRef.child(“searchingUsers”);
ValueEventListener ValueEventListener=新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
列表=新的ArrayList();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
String value=ds.getValue(String.class);
列表。添加(值);
}
//用你的列表做你需要做的事情
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
Log.d(标记,databaseError.getMessage());
}
};
searchingUsersRef.addListenerForSingleValueEvent(valueEventListener);
正如您所看到的,我只在回调内部使用了列表,如果您想在回调外部使用列表,我建议您查看我的anwser的最后一部分,我在其中解释了如何使用自定义回调。您还可以查看此以更好地理解。您好,欢迎来到stackoverflow。那么,到目前为止,您尝试了什么来实现相同的效果呢?嗨,santhosh,我尝试在侦听器之外创建一个列表变量,并在for()循环中添加每个键值,但没有成功,对于count,我使用了arraylist.size()@Hafeezulhaq请看一看。这是我们了解您所面临困难的最佳方式。谢谢您的回答,但您能否给出一些想法,如何在Listener范围之外使用'list'和childrenCount变量?您真的不能。您必须将需要数据的代码移动到
onDataChange
或从那里调用它。请参见,并在编辑中查看。当您在函数外部声明变量时,您可以从活动中的任何位置访问它们,而不仅仅是在侦听器中。我只是不确定这是否是最好的做法“list”仍然是空的,我不知道为什么我尝试了public list itemsList()并返回list变量,但没有成功!感谢您的贡献,得到了解决方案!在监听器范围内执行任务!很高兴听到这个消息。在这种情况下,请考虑通过点击投票箭头上的复选标记接受我的答案,应该改变绿色中的颜色。我会很感激的。谢谢好了,谢谢!但看起来我只能勾选一个答案,这是第一个。答案来自@janwilx72