这是我阅读Firebase数据的代码:
final String[] booknum = {"0"};
databaseReference.child("All BID").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
booknum[0] =Long.toString(snapshot.getChildrenCount());
Toast.makeText(getApplicationContext(), booknum[0],Toast.LENGTH_LONG).show();
}
@Override public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
}
});
Toast.makeText(getApplicationContext(), booknum[0],Toast.LENGTH_LONG).show();
当我执行此操作时,第一个toast(在ValueEventListener内)打印正确答案(例如' 8')。但无论如何,外面的吐司总是打印0。
请帮助!
答案 0 :(得分:0)
ValueEventListener是异步的。监听器内部的代码行(包括booknum [0]的赋值)不能保证在写入侦听器外部的代码行之前执行。如果您依赖于booknum [0]的新值进行某些操作,请考虑在onDataChange()中移动该操作以确保它使用新值。