android firebase读取所有数据库

时间:2017-05-24 21:28:08

标签: android listview firebase arraylist firebase-realtime-database

我正在尝试在Firebase中读取一个名为Tags的特定孩子。问题是,我只是不能将标签(dados.getValue)中的对象放入ArrayList中以便稍后填充到我的ListView中。

我知道很简单,对不起,我是Android的新手

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_taglist);

        tags = new ArrayList<>();
        tagList = (ListView) findViewById(R.id.tagsList);

        tagsRefs = FirebaseConfig.getFireBase();
        tagsRefs.child("tags").child("categorias");

        tagsRefs.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot dados : dataSnapshot.child("tags").getChildren()) {
                    System.out.println("tag EXTRAIDA NO taglist " + dados.getValue());
                     dados.getValue();   //HOW CAN I PUT THIS INTO AN ARRAY TO LATER ADD IN MY ArrayList tags?? 
                    String tagS = dados.getValue(String.class);
                    tags.addAll(tagS);
                }
            }


            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


        tagAdapter = new ArrayAdapter(getBaseContext(), android.R.layout.simple_list_item_2,
                android.R.id.text1,
                tags);


        tagList.setAdapter(tagAdapter);

        tagList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                selectedTag = (String) tagList.getItemAtPosition(position);

                setSelectedTag(selectedTag);

            }
        });


    }

这是我的数据库: h

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为onDataChange()方法是异步调用的。这意味着在调用list方法之前执行向onDataChange()添加标记的语句。这就是为什么你的列表在该方法之外是空的。因此,为了使用该列表,您需要在onDataChange()

中使用它

对于其他方法,请访问此post和此post

希望它有所帮助。