Java Android:函数在firebase help me out更新值之前返回值以返回更新后的值

Java Android:函数在firebase help me out更新值之前返回值以返回更新后的值,java,android,firebase-realtime-database,listener,return-value,Java,Android,Firebase Realtime Database,Listener,Return Value,在上面的代码中,我想获取变量value[0]的更新值,但函数在EventListener更新变量值之前返回NULL。您不能这样做。还有另一种方法可以做到这一点,这是一种更好的方法。如下更改您的功能: 使其返回void 添加ValueEventListener类型的另一个参数 在调用此方法的任何位置传递事件侦听器 更改的功能: public String retrive(DatabaseReference myRef,String Tag) { myRef = my

在上面的代码中,我想获取变量
value[0]
的更新值,但函数在
EventListener
更新变量值之前返回
NULL

您不能这样做。还有另一种方法可以做到这一点,这是一种更好的方法。如下更改您的功能:

  • 使其返回
    void
  • 添加ValueEventListener类型的另一个参数
  • 在调用此方法的任何位置传递事件侦听器
更改的功能:

public String retrive(DatabaseReference myRef,String Tag) {         
     myRef = myRef.child(Tag);
     myRef1=myRef;
     String [] Value = new String[1];
     myRef1.addValueEventListener(new ValueEventListener() {
         @Override             public void onDataChange(DataSnapshot dataSnapshot) {
             Value[0] = dataSnapshot.getValue(String.class).toString();
          }
          @Override             public void onCancelled(DatabaseError databaseError) {
          }
      });
     return Value[0];
 }
之后,当您希望调用函数以获取值时,可以替换以下代码(我假设您编写了这些代码):

致:

然后定义一个方法,在为该值赋值后访问该值:

String value; // this is a field in your class
...
retrive(ref, tag, new ValueEventListener() {
             @Override             public void onDataChange(DataSnapshot dataSnapshot) {
                 value = dataSnapshot.getValue(String.class).toString();
                 doSomethingWithValue(value); // you pass the value to another method and access it in that method
              }
              @Override             public void onCancelled(DatabaseError databaseError) {
              }
          }};

我遇到了这么多这样的问题,这里是为了帮助你超越可能的重复我没有得到解决方案,从你的上述链接如果你有任何答案请帮助我请你花时间尝试理解它,因为它几乎是完全相同的情况。唯一不同的是它使用
boolean
当您使用
String
时,我更新了代码,正如您所说,但是当我访问变量值时,我没有收到更新的值。我可以看到您调用方法并访问值的代码吗@dhrumitpatel@dhrumitpatel我更新了我的代码。我想你现在可以走了。
String value = retrive(ref, tag);
String value; // this is a field in your class
...
retrive(ref, tag, new ValueEventListener() {
             @Override             public void onDataChange(DataSnapshot dataSnapshot) {
                 value = dataSnapshot.getValue(String.class).toString();
                 doSomethingWithValue(value); // you pass the value to another method and access it in that method
              }
              @Override             public void onCancelled(DatabaseError databaseError) {
              }
          }};
public void doSomethingWithValue(String value) {
    //here you access the value after it has been assigned
}