Java 迭代器.next不工作

Java 迭代器.next不工作,java,android,firebase,firebase-realtime-database,iterator,Java,Android,Firebase,Firebase Realtime Database,Iterator,我试图从firebase数据库中获取所有子项的所有值,但当我运行下面的代码时,我只多次获取第一个子项值 names=new ArrayList<>(); rootRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) {

我试图从firebase数据库中获取所有子项的所有值,但当我运行下面的代码时,我只多次获取第一个子项值

  names=new ArrayList<>();
        rootRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot dataSnapshot1:dataSnapshot.getChildren()) {
                    i = i + 1;
                    names.add(dataSnapshot.getChildren().iterator().next().getValue(String.class));
                }
                Toast.makeText(signup.this,""+names,Toast.LENGTH_LONG).show();

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
names=newarraylist();
rootRef.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
i=i+1;
name.add(dataSnapshot.getChildren().iterator().next().getValue(String.class));
}
Toast.makeText(signup.this,“+名称,Toast.LENGTH_LONG.show();
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
我可以将迭代器保存到列表中吗?
我想用最简单的方法来做这件事

这可能对你更合适:

for (DataSnapshot child : dataSnapshot.getChildren()) {
    names.add(child.getValue(String.class));
}
Toast.makeText(signup.this,""+names,Toast.LENGTH_LONG).show();

该循环形式正在通过调用
getChildren()

返回的集合进行迭代,这可能对您更有效:

for (DataSnapshot child : dataSnapshot.getChildren()) {
    names.add(child.getValue(String.class));
}
Toast.makeText(signup.this,""+names,Toast.LENGTH_LONG).show();

这种形式的循环正在通过调用
getChildren()

返回的集合进行迭代。您正在循环的每次迭代中创建一个新的
dataSnapshot.getChildren().iterator()
。尝试仅在循环中使用foreach的值:

for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
  i = i + 1;
  names.add(dataSnapshot1.getValue(String.class));
}
Iterator<DataSnapshot> it = dataSnapshot.getChildren().iterator();
while (it.hasNext()) {
   String nextValue = it.next().getValue(String.class);

   names.add(nextValue);
}

或者,如果要使用迭代器,请按如下方式操作,以便只创建一次:

for(Iterator<DataSnapshot> it = dataSnapshot.getChildren().iterator(); it.hasNext(); ){
  i = i + 1;
  names.add(it.next().getValue(String.class));
}
for(Iterator it=dataSnapshot.getChildren().Iterator();it.hasNext();){
i=i+1;
name.add(it.next().getValue(String.class));
}
或者,您可以使用while循环,它基本上等于上面的第二段代码:

Iterator<DataSnapshot> it = dataSnapshot.getChildren().iterator();
while(it.hasNext()){
  i = i + 1;
  names.add(it.next().getValue(String.class));
}
Iterator it=dataSnapshot.getChildren().Iterator();
while(it.hasNext()){
i=i+1;
name.add(it.next().getValue(String.class));
}

您正在循环的每个迭代中创建一个新的
dataSnapshot.getChildren().iterator()
。尝试仅在循环中使用foreach的值:

for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
  i = i + 1;
  names.add(dataSnapshot1.getValue(String.class));
}
Iterator<DataSnapshot> it = dataSnapshot.getChildren().iterator();
while (it.hasNext()) {
   String nextValue = it.next().getValue(String.class);

   names.add(nextValue);
}

或者,如果要使用迭代器,请按如下方式操作,以便只创建一次:

for(Iterator<DataSnapshot> it = dataSnapshot.getChildren().iterator(); it.hasNext(); ){
  i = i + 1;
  names.add(it.next().getValue(String.class));
}
for(Iterator it=dataSnapshot.getChildren().Iterator();it.hasNext();){
i=i+1;
name.add(it.next().getValue(String.class));
}
或者,您可以使用while循环,它基本上等于上面的第二段代码:

Iterator<DataSnapshot> it = dataSnapshot.getChildren().iterator();
while(it.hasNext()){
  i = i + 1;
  names.add(it.next().getValue(String.class));
}
Iterator it=dataSnapshot.getChildren().Iterator();
while(it.hasNext()){
i=i+1;
name.add(it.next().getValue(String.class));
}

通过调用
dataSnapshot.getChildren().iterator().next()
在循环中,您只能得到由
dataSnapshot.getChildren()返回的第一个元素。尝试将迭代器置于循环之外:

for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
  i = i + 1;
  names.add(dataSnapshot1.getValue(String.class));
}
Iterator<DataSnapshot> it = dataSnapshot.getChildren().iterator();
while (it.hasNext()) {
   String nextValue = it.next().getValue(String.class);

   names.add(nextValue);
}
Iterator it=dataSnapshot.getChildren().Iterator();
while(it.hasNext()){
String nextValue=it.next().getValue(String.class);
名称。添加(下一个值);
}

编辑:没有注意到您通过调用
dataSnapshot.getChildren().iterator().next()
定义了该类型。

在循环中,您只会得到由
dataSnapshot.getChildren()
返回的第一个元素。尝试将迭代器置于循环之外:

for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
  i = i + 1;
  names.add(dataSnapshot1.getValue(String.class));
}
Iterator<DataSnapshot> it = dataSnapshot.getChildren().iterator();
while (it.hasNext()) {
   String nextValue = it.next().getValue(String.class);

   names.add(nextValue);
}
Iterator it=dataSnapshot.getChildren().Iterator();
while(it.hasNext()){
String nextValue=it.next().getValue(String.class);
名称。添加(下一个值);
}
编辑:没有注意到您定义了该类型