Android - 在Firebase数据库中查找现有子项

时间:2017-06-02 14:26:20

标签: android firebase-realtime-database

在我的应用中,我正在添加用户并将其详细信息存储到我的FireBase数据库中。我的一个孩子是连线号码。两个用户不应具有相同的连接号。因此,当我首先添加一个新孩子时,它应检查我的数据库中的连接号。如果存在则应显示吐司。 这是我的用户添加到我的数据库的代码。

 conAddBTN.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    key = mdata.push().getKey();

                    final String selectArea = addConSpinner.getSelectedItem().toString();

                    final String due = dueET.getText().toString();
                    final int mDue = Integer.parseInt(due);

                    String connectionNum = conNumET.getText().toString();
                    connectionNum = "Connection Number = " + connectionNum;

                    final String number = conNumET.getText().toString();

                    String doorNum = conDoorET.getText().toString();
                    doorNum = "Door Number = " + doorNum;

                    String conName = conNameET.getText().toString();
                    conName = "Name = " + conName;

                    final String name = conNameET.getText().toString();

                    String phoneNum = conPhnNumET.getText().toString();
                    phoneNum = "Phone Number = " + phoneNum;

                    String aadharNum = conAthreNumET.getText().toString();
                    aadharNum = "Aadhar Number = " + aadharNum;

                    String rationNum = conRaCaNumET.getText().toString();
                    rationNum = "Ration Number = " + rationNum;

 ConnectionInformation cInfo = new ConnectionInformation(doc, due, selectArea, finalConnectionNum, finalDoorNum, finalConName, finalPhoneNum, finalAadharNum, finalRationNum,mDue);
                            mdata.child(selectArea).child(key).setValue(cInfo);

                            Connections connect = new Connections(number, name, due, doc);
                            connection.child(selectArea).child(key).setValue(connect);

                            totalConecinArea = FirebaseDatabase.getInstance().getReference().child("users").child(userID).child("Total No of Connections");
                            totalConecinArea.child("Total").child(selectArea).child(key).child(number).setValue(mDue);

                            totalNoConnectionDB.child("Total").child(key).child(number).setValue(mDue);

                            toast("New Connection " + finalConnectionNum + "," + finalConName + " is added");

                            Intent i = new Intent(AddConnection.this, AreaGridActivity.class);
                            startActivity(i);

这是我的数据库结构。DataBase Structure

如果您需要任何额外信息,请询问..

1 个答案:

答案 0 :(得分:0)

在您的情况下,您需要获取数据库的dataSnapShot并添加if语句以检查该值是否存在。所以你的代码应该是这样的,

connection.child(selectArea).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot ds : dataSnapshot.getChildren()) {
                            if (ds.child("conecNum").getValue().equals(number)) {
                                toast("Connection Number Already Exists");
                            } else {
                                ConnectionInformation cInfo = new ConnectionInformation(doc, due, selectArea, finalConnectionNum, finalDoorNum, finalConName, finalPhoneNum, finalAadharNum, finalRationNum, mDue);
                                mdata.child(selectArea).child(key).setValue(cInfo);

                                Connections connect = new Connections(number, name, due, doc);
                                connection.child(selectArea).child(key).setValue(connect);

                                totalConecinArea = FirebaseDatabase.getInstance().getReference().child("users").child(userID).child("Total No of Connections");
                                totalConecinArea.child("Total").child(selectArea).child(key).child(number).setValue(mDue);

                                totalNoConnectionDB.child("Total").child(key).child(number).setValue(mDue);

                                toast("New Connection " + finalConnectionNum + "," + finalConName + " is added");

                                Intent i = new Intent(AddConnection.this, AreaGridActivity.class);
                                startActivity(i);
                            }
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });