數據是從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是 –
這裏是我要回'是什麼尺寸'。但你總是轉向零。如果我用「吐司」打印它,它會正常反映。 –