我在查询数据库中的某些信息时遇到麻烦,下图恢复了我要获取的信息,我正在尝试获取“ productId”
这是我的数据库的样子:
https://i.stack.imgur.com/JhJNs.png
实际上,我正在尝试获取此值以便为其设置条件。我正在尝试发送通知,仅当选择了productId = 02时,这是我的代码
if (request.getFoods().isEmpty()) {
Toast.makeText(Cart.this, "Your cart is empty", Toast.LENGTH_SHORT).show();
} else{
final DatabaseReference tokens = FirebaseDatabase.getInstance().getReference("Requests");
final Query data = tokens.orderByChild("productId").equalTo("02"); // get all node with isServerToken
data.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String order_number = String.valueOf(System.currentTimeMillis());
requests.child(order_number).setValue(request);
sendNotificationOrder(order_number);
Toast.makeText(Cart.this, "Notification sent", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
谢谢您的帮助!
答案 0 :(得分:0)
实际上,您的上述代码无法与orderByChild()
一起使用。如果您的foods
节点中有多个项目,其父节点为0
,1
,依此类推,并且您想检查其productId
,则只能是完成。
为此,您必须使父子foods
并为其调用orderByChild()
,以获取productId
。代码看起来像这样:
final DatabaseReference tokens = FirebaseDatabase.getInstance().getReference("Requests").child(id).child("foods");
tokens.orderByChild("productId").equalTo("02").addSingleValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// do what you want
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Do something for errors, don't ignore
}
但是,如果您的数据库结构具有不同的父节点,并且在它与您要从中检索数据的节点之间还有一个中间节点,那么上述代码将无法使用。
详细了解如何使数据库结构适合orderByChild()
here.