【问题标题】:Search by name with firebase in android在android中使用firebase按名称搜索
【发布时间】:2017-10-31 12:55:25
【问题描述】:

几天前我遇到了一个问题,但我没有找到解决方案。

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

数据库是下一个;

我使用的代码是下一个;

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);


 }

在我的情况下,Title 总是返回 null。

有人可以帮帮我吗?我不知道我做错了什么......

【问题讨论】:

  • 由于您将文本转换为全大写,它与混合大小写的内容不匹配。要解决此问题,要么要求用户执行完全大小写匹配,要么将全大写文本存储在附加属性中。我们今天早些时候刚刚解决了一个非常相似的问题:stackoverflow.com/questions/44264337/… 在 Firebase 中搜索是区分大小写的。
  • 我认为问题不在于大写。在我的数据库中,属性名称的值只有大写字母。我的搜索代码对该数据库是否正确?
  • 啊,我明白了。里面有错别字。你的代码加载了user ,而你的JSON有users(最后是s)。
  • 是的,这是一个错误。我将成为“用户”,但结果相同,为空。我不知道为什么...
  • 它有效!谢谢弗兰克!

标签: android firebase search firebase-realtime-database


【解决方案1】:

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

【讨论】:

  • 弗兰克一如既往的好答案。
【解决方案2】:

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

 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);

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2018-12-19
    • 1970-01-01
    • 2019-04-21
    • 2020-03-30
    • 1970-01-01
    • 2020-08-02
    • 2020-10-24
    • 2017-12-16
    相关资源
    最近更新 更多