簡體   English   中英

Iterator.next無法正常工作

[英]Iterator.next is not working

試圖從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) {

            }
        });

我可以將迭代器添加到列表中嗎? 我想要最簡單的方法

您將在循環的每次迭代中創建一個新的dataSnapshot.getChildren().iterator() 嘗試僅在循環內使用foreach的值:

for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
  i = i + 1;
  names.add(dataSnapshot1.getValue(String.class));
}

或者,如果您想使用迭代器,請按照以下步驟進行操作,使其僅創建一次:

for(Iterator<DataSnapshot> it = dataSnapshot.getChildren().iterator(); it.hasNext(); ){
  i = i + 1;
  names.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));
}

這可能更好地為你工作:

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

這種循環形式遍歷了對getChildren()的調用返回的集合。

通過在循環內調用dataSnapshot.getChildren().iterator().next() ,您只會得到dataSnapshot.getChildren()返回的第一個元素。 嘗試將Iterator移出循環:

Iterator<DataSnapshot> it = dataSnapshot.getChildren().iterator();
while (it.hasNext()) {
   String nextValue = it.next().getValue(String.class);

   names.add(nextValue);
}

編輯:沒有注意到您定義了該類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM