2017-09-17 28 views
0

我在這裏遇到問題。 我有一個叫做「用戶」的Firebase數據庫子,裏面有其他孩子叫做「團隊」,我必須把這些內容帶到「團隊」中,並用FirebaseAdapter在ListView中展示他們。在適當時機採取Firebase數據聽衆

的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") 


    ) 

正如你所看到的,我想以「團隊」一specifc子內,我搜索使用的「ID用戶」。 這個「idUser」是使用firebase中的數據快照獲取的,我在這裏搜索登錄到應用程序的用戶的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) { 

     } 
    }); 

我在這裏的問題是,在「ID用戶」是被稱爲在FirebaseListAdapter的代碼部分查詢之前得到執行。所以我得到一個錯誤,因爲idUser是空的。我怎樣才能解決這個問題?

回答

0

我解決了這個問題,只是在聽衆中移動firebaseadapter的代碼。

0

要解決此問題,請在onDataChange()方法內移動idUser字符串的聲明,否則將始終爲null

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

這是由於onDataChange()方法,即使之前您分配.child(idUser)DatabaseReference這就是所謂的異步行爲發生。

移動方法內的聲明和using it也在那裏解決你的問題。還使用了日誌語句這樣的方法中:如果你想使用該方法之外的字符串的值

Log("TAG", idUser); 

,請看一看這個職位,How To Get Async Value Outside onDataChange() Method我的答案。

希望它有幫助。