繁体   English   中英

Arraylist.add 在循环内不起作用

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM