![](/img/trans.png)
[英]How to add elements to an arraylist in java inside a for loop without concurrentmodificationexception
[英]Arraylist .add is not working inside loop
我對 homeContent Arraylist 有一些問題。 看看代碼...
ArrayList<String> homeContent=new ArrayList<>(); //its actually a global list but I'm showing inside just show I've declared and initialised it.
contentDb=FirebaseDatabase.getInstance().getReference().child("home");
contentDb.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
tag=ds.getValue(String.class);
homeContent.add(tag);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getActivity(), "Error Connecting to the Server", Toast.LENGTH_SHORT).show();
}
});
for(int i=0;i<homeContent.size();i++){
Log.i("Entry",homeContent.get(i));
}
所以我使用 Log.i 來跟蹤問題出在哪里,所以我發現元素被添加到列表中,但是一旦它從循環和 valueEventListener function 出來,它又回到了其中包含 0 個元素。
編輯:結果表明該循環內沒有任何東西永久保留
好的,多虧了 Johannes Kuhn,問題已經解決,實際上 for 循環是在調用事件處理程序之后執行的,所以我不得不將循環放在事件處理程序中。
ArrayList<String> arrayList = null;
contentDb=FirebaseDatabase.getInstance().getReference().child("home");
contentDb.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
tag=ds.getValue(String.class);
arrayList = new ArrayList<>();
arrayList.add(tag); // Add into list like this
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getActivity(), "Error Connecting to the Server", Toast.LENGTH_SHORT).show();
}
});
更好的是,您可以像我上面分享的那樣將該值添加到列表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.