2016-09-22 40 views
-2

我有这样的代码:当我与孩子搜索在Firebase android中为null?

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" : "[email protected]", 
    "status" : "check in" 
    }, 
    "2" : { 
    "email" : "[email protected]", 
    "status" : "check out" 
    }, 
    "123" : { 
    "email" : "[email protected]", 
    "status" : "reservado" 
    } 
} 

当我把一个电子邮件[email protected]返回null。我需要它返回状态,但它返回null。我想我错过了一个孩子。

+3

什么奇怪的标题。 – shmosel

+1

奇怪的问题 –

+1

请在您的问题中输入正确的英文。 –

回答

0

你在代码中有几个问题,但没有什么重要的。

下面是摘录,最有可能的工作:

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