2017-03-01 62 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()方法