Java 迭代器.next不工作
我试图从firebase数据库中获取所有子项的所有值,但当我运行下面的代码时,我只多次获取第一个子项值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) {
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);
名称。添加(下一个值);
}
编辑:没有注意到您定义了该类型