android-Firebase从datasnapshot返回空值为什么?
我正在使用以下代码进行一些兜售:android-Firebase从datasnapshot返回空值为什么?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在使用以下代码进行一些兜售: mCevap.child(post_key).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { size = (int) dataSnapshot.getChildrenCount(); } @Override
mCevap.child(post_key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
size = (int) dataSnapshot.getChildrenCount();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
viewHolder.setCount(size);
大小返回空值,但我不明白为什么。我想将计数值传递给recyclerview。数据是从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之后
在Ondata变化中
这可能不是你所期望的!数据是从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 isHere的“大小”。但你一直在变为零。如果我用“Toast”打印它,它会正常反映。我如何将它传输到TextView(也可以在RecycleView中找到)。