[英]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.