【问题标题】:Android: Function returns the value before the value is updated from firebase help me out to return the updated valueAndroid:函数在从firebase更新值之前返回值帮助我返回更新后的值
【发布时间】:2017-03-11 06:27:03
【问题描述】:
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];
 }

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

【问题讨论】:

  • 我遇到过很多这样的问题,这里是my latest answer来帮助你
  • 如果您有任何答案,我没有从您的上述链接中获得解决方案,请帮助我
  • 请花点时间尝试理解它,因为它几乎完全相同。唯一不同的是它使用boolean 而你使用String

标签: java android firebase-realtime-database listener return-value


【解决方案1】:

你不能这样做。还有另一种方法可以做到这一点,这是一种更好的方式。像这样改变你的功能:

  • 让它返回void
  • 添加另一个 ValueEventListener 类型的参数
  • 在调用此方法的任何位置传递事件侦听器

改变的功能:

public String retrive(DatabaseReference myRef,String Tag, ValueEventListener listener) {         
         myRef = myRef.child(Tag);
         myRef1=myRef;
         myRef1.addValueEventListener(listener);
     }

之后,当你想调用你的函数来获取值时,你可以替换以下代码(我假设你写的):

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
}

【讨论】:

  • 我按照你说的更新了我的代码,但是当我访问变量 value 我没有收到更新的值
  • 我能看到你调用方法和访问值的代码吗? @dhrumitpatel
  • @dhrmitpatel 我更新了我的代码。我想你现在可以走了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多