2017-09-17 3 views
0

여기에 문제가 있습니다. "사용자"라는 Firebase 데이터베이스 하위를 "팀"이라고 부르며 "팀"이라고하는 다른 자식이 있으며 FirebaseAdapter를 사용하여 ListView에 표시해야합니다.올바른 시점에 Firebase Data Listener 가져 오기

은 FirebaseAdapter는 다음과 같이이다 : 당신이 볼 수 있듯이

FirebaseListAdapter<String> firebaseListAdapter = new FirebaseListAdapter<String>(
      this, 
      String.class, 
      android.R.layout.simple_list_item_1, 
      //todo Conseguir exibir na lista, as equipes embedadas no usuário logado 
      mRef.child("users").child(idUser).child("teams") 


    ) 

, 나는 내가 "idUser"를 사용하여 검색하는 것을하는을 구체적으로 아이 내부의 "팀"을 가지고 싶어. 이 "idUser"는 firebase의 datasnapshot을 사용하여 가져옵니다. 여기에서 앱에 로그온 한 사용자의 ID를 검색합니다. datasnapshot 코드는 다음과 같습니다 : 여기

user = mAuth.getCurrentUser().getEmail().toString(); 
    mRef = FirebaseDatabase.getInstance().getReference(); 
    Query query = mRef.child("usuarios").orderByChild("email").equalTo(user); 
    query.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot child : dataSnapshot.getChildren()){ 
       idUser = child.getKey().toString(); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

내 문제는 "idUser은"실행중인 얻을 쿼리 전에 FirebaseListAdapter의 코드 부분에 호출되고있다. idUser가 비어 있기 때문에 오류가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

0

나는 firebaseadapter의 코드를 청취자 내로 옮기는 것만으로이 문제를 해결했다.

0

이 문제를 해결하려면 idUser 문자열을 onDataChange() 메서드 내에 옮기십시오. 그렇지 않으면 항상 null이됩니다.

String idUser = child.getKey().toString(); 

이도 당신이 당신의 DatabaseReference.child(idUser)를 할당하기 전에이라고 onDataChange() 방법의 비동기 행동 때문에 일어나고있다.

또한 메서드 내에서 선언을 이동하면 using it도 문제를 해결합니다. 이 같은 방법 안에 또한 로그 문을 사용

Log("TAG", idUser); 

을 당신이 그 방법 밖에 해당 문자열의 값을 사용하려면,이 게시물에, How To Get Async Value Outside onDataChange() Method에서 내 대답을 살펴 보시기 바랍니다.

희망이 있습니다.

관련 문제