我正在尝试从Firebase数据库中读取值并将其分配给全局变量。但是,变量似乎总是为空。我检查了很多论坛,他们都说我需要附加一个'回调',因为这是一个异步任务。有人可以帮我解决确切的代码吗?
socket.io
答案 0 :(得分:2)
由于onDataChange()
方法被称为asynchronous
,因此无法在全局变量中存储从Firebase数据库获取的值。这意味着在您尝试从数据库获取数据之前调用setText()
方法,这就是为什么始终为null
。
要解决此问题,您需要移动以下代码行:
t1.setText(String.valueOf(server_time_long));
在onDataChange()
方法内。这可以这样做:
getServerTime.setValue(ServerValue.TIMESTAMP).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
system_time = System.currentTimeMillis();
getServerTime.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
long server_time_long = dataSnapshot.getValue(Long.class);
t1.setText(String.valueOf(server_time_long));
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
});
如果您想在该方法之外使用该值,我建议您从post看到我的答案。