2017-05-07 2 views
0

제 애플리케이션에서 데이터베이스의 한 노드에서 값을 검색하고이 값을 사용하여 코드의 다른 곳으로 전달합니다.datasnapshot의 Firebase 반환 값

firebase에서 데이터 스냅 샷의 데이터를 읽고이 값을 데이터 스냅 샷 외부에서 사용할 수 있습니까?

는, 다른 방법으로 사용하기 위해 아래의 방법에서의 groupId phoneNum 또는 변수를 반환 : onDataChange가 asynchronously라고 때문에 일어나고

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

. 즉, phoneNum을 얻는 문은 onDataChange이 호출되기 전에 실행됩니다. 외부에서 사용하려면 null이됩니다. 따라서 phoneNum을 사용하려면 onDataChange() 방법으로 사용하거나 postpost을 방문하거나 다른 방법을 사용해야합니다.

희망이 있습니다.

+0

문제를 해결 했습니까? 괜찮은거야? –

0

addListenerForSingleValueEvent을 사용할 때 'onDataChange and onCancelled`을 구현하는 클래스를 정의하고 있기 때문에 불가능합니다.

인터페이스를 사용하여 전화 번호가 언제 가져 왔는지 클래스에 알릴 수 있습니다.