2017-05-30 99 views
1

我几天前遇到了问题,但没有找到解决方案。在android中按照名称搜索firebase

我试图按名称搜索我的firebase数据库,但结果始终为空。

该数据库是下一个;

database

,我使用的是下一个的代码;

final String nombre = edtNombreJugador.getText().toString().trim().toUpperCase(); 

mDatabase.child("user").child("personalData").orderByChild("name").equalTo(nombre); 

mDatabase.addListenerForSingleValueEvent(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 

for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()){ 

String title = (String) singleSnapshot.child("name").getValue(String.class); 
System.out.println("TITLE: "+title); 


} 

标题在我的情况下总是返回null。

有人可以帮助我吗?我不知道我在做什么坏...

+0

由于您正在将文本转换为全大写,因此它与混合大小写内容不匹配。要解决这个问题,可以要求用户执行精确匹配或将全大写文本存储在其他属性中。我们今天刚刚解决了一个非常类似的问题:https://stackoverflow.com/questions/44264337/i-am-trying-to-perform-a-search-on-names-within-my-firebaserecycleradapter-with Search in Firebase区分大小写。 –

+0

我认为问题不是大写。在我的数据库中,属性名称的值只能用大写字母。我的搜索代码对于那个数据库是正确的? –

+0

啊,我明白了。那里有一个错字。你的代码加载'user',而你的JSON有'users'(最后加上's')。 –

回答

2

现在你正在查询数据库路径/user/personalData。然后对于那里的每个子节点,您将name属性与用户输入的值进行比较。所以/user/personalData/***/name

这与数据库中的路径不匹配,即/user/***/personalData/name。要查询您的操作,请执行以下操作:

Query query = mDatabase.child("user").orderByChild("personalData/name").equalTo(nombre); 

query.addListenerForSingleValueEvent(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) {... 
+0

弗兰克一如既往的好回答。 –

0

林与此代码(对我来说更清晰)的回报也试图在所有数据库的名字,但结果是空太:

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("https://stackoverflow.com/users/"); 
mDatabase.child("personalData"); 
    final UsersData[] user = {null}; 
    ValueEventListener postListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
    for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) { 
     String title = (String) 
     postSnapshot.child("name").getValue(String.class); 
      System.out.println("TITLE: "+title); 
     } 
    } 
     @Override 
     public void onCancelled(DatabaseError firebaseError) { 
     Log.e("The read failed: " ,firebaseError.getMessage()); 
     } 
    }; 
    mDatabase.addValueEventListener(postListener);