【问题标题】:Android studio Firebase database queries selected valueAndroid studio Firebase 数据库查询选定值
【发布时间】:2018-12-22 00:47:58
【问题描述】:

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

             }
         });

感谢您的帮助!

【问题讨论】:

  • 嘿@jeanquestion 我的回答对您解决问题有帮助吗?

标签: java android firebase firebase-realtime-database


【解决方案1】:

实际上,您上面的代码不适用于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. 的数据库结构

【讨论】:

  • Requestsfoods 节点之间还有一个子节点。我猜是用户ID。因此还应添加对child(uid) 的调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多