Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查firebase实时数据库中是否存在特定值?_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

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

Java 如何检查firebase实时数据库中是否存在特定值?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在尝试编写一个查询,以检查mcustDeliveryStatus上是否存在任何“挂起”状态。我想签入订单节点,查看mcustDeliveryStatus是否存在任何挂起状态 我编写了以下查询 mDatabase = FirebaseDatabase.getInstance().getReference("Order"); final Query query = mDatabase.OrderByChild("mcustDeliveryStatus").equalTo("Pending");

我正在尝试编写一个查询,以检查mcustDeliveryStatus上是否存在任何“挂起”状态。我想签入订单节点,查看mcustDeliveryStatus是否存在任何挂起状态

我编写了以下查询

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) {

        }
    });

此查询工作正常,但问题是即使在“我的订单”节点中没有挂起状态,也会运行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);

订单节点是否应该只有一个子节点?如果不是,那么使用singleValueEventListener的目的是什么?