如何检查Firebase数据类Android中是否已存在某个值

tin*_*tin 11 android firebase firebase-realtime-database

我想检查Firebase数据库中是否已存在总线编号.

这是我的示例代码.我一直在寻找过去的日子,但我找不到合适的代码.

ref = new Firebase(Config.FIREBASE_URL);
            postRef = ref.child("BusNumber");

            busNum = edtBus.getText().toString().trim();
            route1 = route.trim();
            seat = edtSeat.getText().toString().trim();

            if (!busNum.isEmpty() && !route1.isEmpty() && !seat.isEmpty()) {
                postRef.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        if (dataSnapshot.child(busNum).exists()) {
                            edtBus.setError("Bus number already exists.");
                            edtBus.setText("");
                        } else {
                            busNumber = new BusNumber();
                            busNumber.setBusNum(busNum);
                            busNumber.setRoute(route1);
                            busNumber.setNumSeat(seat);
                            postRef.push().setValue(busNumber);
                            edtBus.setText("");
                            edtSeat.setText("");
                            Toast.makeText(AddBusActivity.this, "Saving successful!", Toast.LENGTH_SHORT).show();
                        }
                    }

                    @Override
                    public void onCancelled(FirebaseError firebaseError) {
                        Toast.makeText(AddBusActivity.this, "Error", Toast.LENGTH_SHORT).show();
                        Toast.makeText(AddBusActivity.this, firebaseError.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });

            } else {
                Toast.makeText(AddBusActivity.this, "Please complete the information", Toast.LENGTH_SHORT).show();
            }
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?提前致谢.无论if语句是否正确,我还有问题是为什么postRef.addListenerForSingleValueEvent......不起作用?我试图测试一些吐司消息,但消息不会弹出.

这是我的firebase数据库

sil*_*oxA 16

你的方法是错的.

当你这样做时dataSnapshot.child(busNum).exists(),它正在寻找busNum钥匙部分,你的钥匙在哪里-kasajdh....

所以你可以做的就是,iterable现在当你寻找 data.child(busNum).exists()它与价值相关时

   postRef.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot data: dataSnapshot.getChildren()){
                    if (data.child(busNum).exists()) {
                        //do ur stuff
                    } else {
                       //do something if not exists
                    }
                  }
                }

                @Override
                public void onCancelled(FirebaseError firebaseError) {

                }
            });
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以查询确切的条目,而不是获取整个可迭代的数据列表.

  postRef = FirebaseDatabase.getInstance().getReference().child("BusNumber");

    postRef.orderByChild("busNum").equalTo(busNum)
        .addListenerForSingleValueEvent(new ValueEventListener() {

           @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists()){
                   //bus number exists in Database
            } else {
                //bus number doesn't exists.
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });
Run Code Online (Sandbox Code Playgroud)