我有一个应用程序在构建过程中某些我需要从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方法时,它可以工作但是没有任何建议是非常有帮助的。祝大家度过愉快的一天。
答案 0 :(得分:1)
您的selectedCategoryList
列表始终为空,因为onDataChange()
方法具有异步行为,这意味着甚至在您尝试将DataForRow
类的对象添加到列表之前就会调用该行为。快速解决此问题的方法是仅在selectedCategoryList
方法内声明并使用您的onDataChange()
列表,或者如果您想在外面使用它,则需要创建自己的回调,为此,我建议你会从 post 中看到我答案的最后一部分。
答案 1 :(得分:0)
Firebase异步工作。在使用Log编程执行该行之后,您可能从firebase获得了数据。正如特里斯坦所提到的,如果你把你的日志放在听众中,它就会起作用