gpt4 book ai didi

multithreading - 如何将Firebase中的值存储在全局变量中?

转载 作者:行者123 更新时间:2023-12-03 12:59:22 26 4
gpt4 key购买 nike

我正在尝试从Firebase数据库中读取一个值,并将其分配给全局变量。但是,变量似乎总是为空。我检查了许多论坛,他们都说我需要附加一个“回调”,因为这是一个异步任务。有人可以帮我提供确切的代码吗?

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) {
server_time_long = dataSnapshot.getValue(Long.class);




}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

t1.setText(String.valueOf(server_time_long));
}
});

最佳答案

由于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中看到我的答案。

关于multithreading - 如何将Firebase中的值存储在全局变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46806849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com