java - 如何检查 firebase 实时数据库中是否存在特定值?

标签 java android firebase firebase-realtime-database

我正在尝试编写一个查询来检查 mcustDeliveryStatus 上是否有任何“待处理”状态。我想检查 Order 节点是否有 mcustDeliveryStatus 的待处理状态。

Example of my node:

我编写了以下查询

mDatabase = FirebaseDatabase.getInstance().getReference("Order");
final Query query = mDatabase.OrderByChild("mcustDeliveryStatus").equalTo("Pending");

                  query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                Toast.makeText(VWelcome.this, "new order", Toast.LENGTH_LONG).show();
                Intent i = new Intent(VWelcome.this, ViewOrderRequest.class);
                startActivity(i);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

此查询工作正常,但问题是即使我的 Order 节点中没有 Pending 状态, Intent 也会运行。有人知道为什么吗?

最佳答案

由于您使用 @NonNull 注释您的 DataSnapshot 对象,这意味着您告诉编译器您的对象不能为 null,因此它总会返回一些东西。换句话说,如果没有结果,它将返回一个空的 DataSnapshot 对象。要解决此问题,您应该使用以下代码行检查该对象内有多少个子对象:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference orderRef = rootRef.child("Order");
Query query = orderRef.orderByChild("mcustDeliveryStatus").equalTo("Pending");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        long count = dataSnapshot.getChildrenCount();
        if (count > 0) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String mGasBand = ds.child("mGasBand").getValue(String.class);
                Log.d(TAG, mGasBand);
            }
        } else {
            Log.d(TAG, "No data!");
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
query.addListenerForSingleValueEvent(valueEventListener);

关于java - 如何检查 firebase 实时数据库中是否存在特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58015008/

相关文章:

java - 我可以对具有 'Z' 和 '+1:00' 后缀的日期使用一种 SimpleDateFormat 模式吗?

java - 在 Java 中查询嵌套映射

android - C2DMBroadcastReceiver 的 onReceive 未执行(用于注册)

javascript - 如何在 Android(和 iOS)上查看 JavaScript 控制台?

android - 首次使用android studio "URI is not registered (Settings | Languages & Frameworks | Schemas and DTDs)"错误

Firebase 用户的 context.auth 仍然存在 allAuthenticatedUsers 使用 UNAUTHENTICATED 保护 Google 功能错误

java - 最小化障碍物和空间约束的总路径成本

Java 的 Card 类示例 - 打印枚举值

firebase - 当我尝试使用 Firebase 托管部署我的网站时出现错误 - 错误 : An unexpected error has occurred

firebase - 正在记录新的 Firebase 事件,但上传时显示没有数据