2017-02-18 46 views
0

正如你从下面的代码可以看到,我从onDataChange()内部输出retrievedValue,它按预期工作。但是我不能从其他地方输出retrievedValue,因为它返回null尝试从Firebase检索值,但获取空值?

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

此行返回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) { 

     } 
    }); 
+0

谢谢清理东西。那么,如何保存'retrieveValue',以便我可以在其他地方使用它? – Me123

+0

你正在保存它非常好。你只需要在**'onDataChange'之后**使用** **(之后我的意思是“within”) –

+0

你的意思是我唯一的选择是在'onDataChange'内使用'retrieveValue'? – Me123

相关问题