试图从Firebase中检索值,但是获取null?

时间:2017-02-18 14:30:28

标签: java firebase

从下面的代码中可以看出,我从retrievedValue内部输出onDataChange(),它按预期工作。但我无法从其他地方输出retrievedValue,因为它会返回null

DatabaseReference ref = FirebaseDatabase.getInstance().getReference();

ref.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        retrievedValue = (Long) dataSnapshot.getValue();

        System.out.println(retrievedValue); //this line works
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

System.out.println(retrievedValue); //this line returns null! How can I fix this?

1 个答案:

答案 0 :(得分:1)

  

此行返回null!我该如何解决这个问题?

我认为你不理解异步代码是如何工作的......首先,没有任何东西返回null。 尚未分配

您的代码与此完全相同。

DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
System.out.println(retrievedValue); //this line returns null! 

ref.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        retrievedValue = (Long) dataSnapshot.getValue();

        System.out.println(retrievedValue); //this line works
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

没有什么可以解决的,因为您使用Firebase时出错了。

如果您需要retrievedValue,那么您应该将所有相关代码放入(或之后,如通过其他方法)onDataChange

例如

private Long retreivedValue; // starts as null

public static void updateSomething(Long data) {
    System.out.println(data); // this line works
}

public static void main(String... args) {
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();

    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            retrievedValue = (Long) dataSnapshot.getValue();

            updateSomething(retrievedValue); 
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });