【问题标题】:When I search with child is null in Firebase android?当我在 Firebase android 中搜索 child 为 null 时?
【发布时间】:2016-09-22 02:39:29
【问题描述】:

我有这个代码:

String email = FirebaseAuth.getInstance().getCurrentUser().getEmail();
myRef = database.getReference("reserva/");
myRef.orderByChild("email").equalTo(email).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

      String value = dataSnapshot.child("reserva/1/status").getValue(String.class);
        String status;
        TextView textview2 = (TextView) findViewById(R.id.TextView2);
        if (value != null) {
            status = dataSnapshot.getKey() + getString(R.string.statusreservafeita);
            textview2.setText(status + value);
        } else
            textview2.setText(R.string.statusreservafail );
    }

    @Override
    public void onCancelled(DatabaseError error) {
        TextView textview2 = (TextView) findViewById(R.id.TextView2);
        textview2.setText(R.string.statusreservafail );
    }
});

我的数据:

 "reserva" : {
  "1" : {
    "email" : "teste@teste.com",
    "status" : "check in"
  },
  "2" : {
    "email" : "fabio@ciaf.com.br",
    "status" : "check out"
  },
  "123" : {
    "email" : "fbaoo07@gmail.com",
    "status" : "reservado"
  }
}

当我发送电子邮件 teste@teste.com 时,它返回 null。我需要它来返回状态,但它返回 null。我想我想念一个孩子。

【问题讨论】:

  • 多么奇怪的标题。
  • 奇怪的问题
  • 请在您的问题中输入正确的英语。
  • 错误是哪一行?我们不是魔术师。
  • 看来@Frank van Puffelen 在这种情况下是真正的魔术师.. ;-)

标签: java android firebase firebase-realtime-database


【解决方案1】:

您的代码中有一些问题,但没有什么大问题。

这是最有可能工作的 sn-p:

myRef.orderByChild("email").equalTo(email).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
            String status = childSnapshot.child("status").getValue(String.class);
        }
    }

我所做的更改是:

  1. 我在dataSnapshot.getChildren() 上添加了一个循环。一个查询可以返回多个孩子。因此,即使只有一个匹配项,它也会返回一个列表。通过循环dataSnapshot.getChildren(),我们得到了每个匹配项。
  2. 我直接从statusSnapshot 获取值,而不是从根目录查找。

或者,如果你想通过它的绝对路径查找孩子,你可以这样做:

statusRef = database.getReference("reserva/1/status");
statusRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String status = dataSnapshot.getValue(String.class);
    }
    ... 

【讨论】:

    猜你喜欢
    • 2020-03-25
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2013-10-23
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多