2017-05-07 49 views
0

在我的應用程序中,我需要從數據庫中的一個節點檢索值,並使用此值將其傳遞到代碼中其他方法的另一個方法。來自datasnapshot的Firebase返回值

是否可以從Firebase中的數據快照中讀取數據並返回該值以供數據快照使用?

例如,從下面的方法返回PHONENUM或變量的groupId用於另一種方法:

public void getUserPhoneNum(String uId){ 

    usersDatabase.child(uId).addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnapshot.exists() || dataSnapshot.getValue() != null) { 
       User mUser = dataSnapshot.getValue(User.class); 
       String userPhone = mUser.getPhoneNum(); 

       Group mGroup = dataSnapshot.child("groups").getValue(Group.class); 
       String groupId = mGroup.getGroupId(); 

       groupsDatabase.child(groupId).child("members").child(userPhone).child("playing").setValue() 
       if (userPhone != null) { 
       } 
      } 
      else { 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 

回答

1

這是發生,因爲onDataChange被稱爲asynchronously。這意味着在調用onDataChange之前執行您獲得phoneNum的語句。如果你想在外面使用它,它將是空的。因此,爲了使用phoneNum,您需要在onDataChange()方法中使用它,或者使用另一種方法訪問此post和此post

希望它有幫助。

+0

你解決了這個問題嗎?一切還好嗎? –

0

這是不可能的,因爲當您使用addListenerForSingleValueEvent時,您正在定義一個實現onCancelled上的onDataChange and的類。

您可以改用接口讓班級知道何時獲取電話號碼。