Android studio Firebase数据库查询选定的值

时间:2018-12-20 18:50:49

标签: java android firebase firebase-realtime-database

我在查询数据库中的某些信息时遇到麻烦,下图恢复了我要获取的信息,我正在尝试获取“ 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) {

             }
         });

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

实际上,您的上述代码无法与orderByChild()一起使用。如果您的foods节点中有多个项目,其父节点为01,依此类推,并且您想检查其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.