数据是从Firebase异步加载的。这意味着您的代码执行的顺序并不是您可能期望的。
System.out.println("Before addListenerForSingleValueEvent");
mCevap.child(post_key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println("In onDataChange");
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException(); // don't ignore errors
}
});
System.out.println("After addListenerForSingleValueEvent");
的这个输出是:你可以很容易地添加一些日志语句代码中看到这个
之前addListenerForSingleValueEvent
后addListenerForSingleValueEvent
在onDataChange
这可能不是你所期望的!数据是从Firebase异步加载的。而不是等待它返回(这会导致“应用程序未响应”对话框),该方法继续。然后,当数据可用时,您的onDataChange
被调用。
为了使程序工作,你需要移动需要的数据为的onDataChange
方法的代码:
mCevap.child(post_key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println("size ="+dataSnapshot.getChildrenCount());
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException(); // don't ignore errors
}
});
安置自己的数据库结构,什么mCevap是 –
这里是我要回'是什么尺寸'。但你总是转向零。如果我用“吐司”打印它,它会正常反映。 –