如何将firebase中的值存储在全局变量中?

时间:2017-10-18 09:25:16

标签: multithreading firebase firebase-realtime-database

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

socket.io

1 个答案:

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