addValueChangeListener在android中不会触发

时间:2018-02-16 23:39:23

标签: java android firebase methods triggers

我有一个应用程序在构建过程中某些我需要从FirebaseDatabase获取数据并在自定义列表视图中显示它们我的代码部分用于onDataChange方法

    myDatabase=FirebaseDatabase.getInstance();
    myRef= myDatabase.getReference().child("TvSeries");
    myAuth  = FirebaseAuth.getInstance();
    myUser = myAuth.getCurrentUser();

    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot currentData : dataSnapshot.getChildren()){
                if(currentData.child("tCategory").child("tPrimary").getValue().toString().equals("Aksiyon")){ }
                selectedCategoryList.add(new  DataForRow(currentData.getKey(),
                        currentData.child("tCategory").child("tPrimary").getValue().toString(),
                        currentData.child("tReleaseDate").getValue().toString()));

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });



    Integer size =selectedCategoryList.size();
    Log.d("Size:",  size.toString());

当我输入断点onDataChange方法时,它可以工作但是没有任何建议是非常有帮助的。祝大家度过愉快的一天。

2 个答案:

答案 0 :(得分:1)

您的selectedCategoryList列表始终为空,因为onDataChange()方法具有异步行为,这意味着甚至在您尝试将DataForRow类的对象添加到列表之前就会调用该行为。快速解决此问题的方法是仅在selectedCategoryList方法内声明并使用您的onDataChange()列表,或者如果您想在外面使用它,则需要创建自己的回调,为此,我建议你会从 post 中看到我答案的最后一部分。

答案 1 :(得分:0)

Firebase异步工作。在使用Log编程执行该行之后,您可能从firebase获得了数据。正如特里斯坦所提到的,如果你把你的日志放在听众中,它就会起作用