这是我读取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。
请帮助!
最佳答案
ValueEventListener是异步的。监听器内部的代码行(包括booknum[0]的赋值)不能保证在监听器外部编写的代码行之前执行。如果某些操作依赖于booknum[0]的新值,请考虑将该操作移到ondatachange()中,以确保它使用新值。