2017-03-01 61 views
0

所以我目前正在創建一個方法來搜索我的Firebase數據庫的用戶名。我users/結構是這樣的:Android的Firebase搜索的孩子不打電話onDataChange

uid : { 
    displayName:value, 
    email:value, 
    otherUserData... 
} 

這對於如果我有我搜索的用戶的UID搜索的偉大工程,但我希望用戶能夠通過賬戶名,因爲搜索其他帳戶通過UID搜索將是荒謬的。目前,我試圖用這個方法來做到這一點:

public void getUserByUsername(String username, final DatabaseCallback c) { 
    Log.d(TAG, "getByUsername"); 
    DatabaseReference userRef = FirebaseDatabase.getInstance().getReference("users"); 
    Query query = userRef.orderByChild("displayName").equalTo(username); 
    query.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot user : dataSnapshot.getChildren()) { 
       Log.d(TAG, "Found user " + dataSnapshot.getValue()); 
       User u = user.getValue(User.class); 
      } 
      Log.d(TAG, "No user found"); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.d(TAG, "Cancelled"); 
     } 
    }); 
} 

當我把這種方法,第一Log.d呼叫接通,但既不裏面onDataChange的Log.d電話獲取製造。思考?

+1

使用query.addValueEvent ..而不是userRef.addValueEvent ... – Linxy

+0

* facepalm *來發現此問題。雖然 – Jason

+0

isnide for循環,你會想要user.getValue(..)而不是dataSnapshot.getValue() – Linxy

回答

0

問題是我被拒絕讀取權限,因此onDataChange()沒有被調用,但是onCancelled()是。我通過將Log.d()呼叫放入我的onCancelled()方法