Android Firebase实时数据库,can';t检查数据库中是否存在现有数据,如果不存在则推送

Android Firebase实时数据库,can';t检查数据库中是否存在现有数据,如果不存在则推送,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有两个编辑文本,两个时间选择器和两个日期选择器,它们都是受限的(时间和日期选择器)。两个时间和日期选择器用于Cat时间和日期,另外两个用于Dog时间和日期。开始使用Firebase,一切都很好,如果我从编辑文本和时间和日期选择器发送数据,数据存储就很好 以下是我的Firebase实时数据的外观: 正如您每次添加另一组数据(如:userName、userTime、userData)时所看到的,它存储在用户子级中,根据所选的按钮,它存储在Dog或Cats子级中,当然,每组数据都有一个用户ID。

我有两个编辑文本,两个时间选择器和两个日期选择器,它们都是受限的(时间和日期选择器)。两个时间和日期选择器用于Cat时间和日期,另外两个用于Dog时间和日期。开始使用Firebase,一切都很好,如果我从编辑文本和时间和日期选择器发送数据,数据存储就很好

以下是我的Firebase实时数据的外观:

正如您每次添加另一组数据(如:userName、userTime、userData)时所看到的,它存储在用户子级中,根据所选的按钮,它存储在Dog或Cats子级中,当然,每组数据都有一个用户ID。 问题是我不知道如何检查用户选择的时间和日期是否与我数据库中的时间和日期相同。我试过了,但每次都没有成功

public void UserInput () {

    String phone = phoneNumber.getText().toString().trim();
    String consult = consultationMotiv.getText().toString().trim();
    String timpePick = pickTimeTextView.getText().toString().trim();
    String datePick = pickDateTextView.getText().toString().trim();
    String fullName = name.getText().toString().trim();
    String group = allAnimals.getText().toString().trim();

final String id = mDatabaseReference.push().getKey();

            final User user = new User(id, fullName, datePick, timpePick, consult, phone, group);
为了根据用户选择的时间选择器存储数据,我放置了一个文本视图,该视图将根据选择的日期和时间选择器获取数据。 例如:如果用户选择了Dog时间和日期选择器,textview将存储数据“Dogs”,如果用户单击Cat时间和日期选择器,则textview将存储“Cats”

但即使所有数据都是一样的,这些数据仍然是广告。我试着这样做:

mDatabaseReference.child("users").child("Dog").equalTo(timpePick + datePick).
                        addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists()) {
                            Toast.makeText(getApplicationContext(), "Exists", Toast.LENGTH_SHORT).show();
                            mDatabaseReference.child("users").child("Dog").child(id).setValue(user);

                        } else {
                            Toast.makeText(getApplicationContext(), "Select another hour", Toast.LENGTH_SHORT).show();
                        }

                    }


                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
但是数据根本没有增加,即使我改变了时间和时间,我最终还是得到了祝酒词“选择另一个小时”。
提前谢谢

所以我试着将它应用到我现有的项目中,我设法倾听存在的价值。这是我的代码供参考

public void getMessageThreads() {
    threadRef = database.getReference("Thread")
            .child("Anna Baclayon");
    threadRef.orderByChild("time").equalTo("Mar 02, 2018 09:32:56").addValueEventListener(threadListener);
}

ValueEventListener threadListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        chatUsers.clear();
        for (DataSnapshot messageThread : dataSnapshot.getChildren()) {
            String time = (String) messageThread.child("time").getValue();

            if(time.contains("Mar 02, 2018 09:32:56")){
                Toast.makeText(getContext(), "Exists", Toast.LENGTH_SHORT).show();
            }else
                Toast.makeText(getContext(), "Doesnt Exists", Toast.LENGTH_SHORT).show();
        }
    }

谢谢我试过了,但每次都会发布另一组数据,当数据已经存储时,它不会向我显示Toast消息检查我编辑的答案。。确保拾取时间的格式与保存的格式相同不要忘记
.equalTo(拾取时间)
谢谢!我又试了一次,现在我不知道我做错了什么。在onDataChange中,当我尝试添加子对象时,它不起作用。我得到了这个(无法解析方法'child(java.lang.String))。我指的是:如果((dataSnapshot.getChildren().*here*child(“userTime”).getValue()).contains(picked_time))
dataSnapshot item=dataSnapshot.getChildren()
then
item.child(“userTime”)
public void getMessageThreads() {
    threadRef = database.getReference("Thread")
            .child("Anna Baclayon");
    threadRef.orderByChild("time").equalTo("Mar 02, 2018 09:32:56").addValueEventListener(threadListener);
}

ValueEventListener threadListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        chatUsers.clear();
        for (DataSnapshot messageThread : dataSnapshot.getChildren()) {
            String time = (String) messageThread.child("time").getValue();

            if(time.contains("Mar 02, 2018 09:32:56")){
                Toast.makeText(getContext(), "Exists", Toast.LENGTH_SHORT).show();
            }else
                Toast.makeText(getContext(), "Doesnt Exists", Toast.LENGTH_SHORT).show();
        }
    }