Arraylist.add在循环中不起作用



我的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函数中出来,它就回到了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();
}
});

更好的是,你们可以像我在上面分享的那样,把这个值添加到列表中。

最新更新