在android中按名称搜索firebase

时间:2017-05-30 21:52:58

标签: android firebase search firebase-realtime-database

我几天前遇到问题,但我找不到解决方法。

我正在尝试按名称搜索我的firebase数据库,但结果始终为null。

数据库是下一个;

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。

是的,有人能帮帮我吗?我不知道我做得不好......

2 个答案:

答案 0 :(得分:3)

现在您正在查询数据库路径/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) {...

答案 1 :(得分:0)

我也尝试使用这段代码(对我来说更清楚)返回数据库中的所有名称,但结果也是null:

 DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("/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);