Firebase实时数据库,无法检查数据库中的现有数据,如果不存在则推送

时间:2018-04-03 06:09:21

标签: android firebase firebase-realtime-database

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

这就是我的Firebase实时数据的外观:

enter image description here

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

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时间和日期选择器,它将存储“Cats”

 if (allAnimals.getText().equals("Dogs")) {
                // send to userGroup DogCats
mDatabaseReference.child("users").child("Dog").
                        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) {

                    }
                });

但即使所有数据都相同,数据仍然是广告。我试过这个:

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

                    }
                });

但是数据根本没有添加,即使我改变了小时和时间,我也最终得到了“选择另一个小时”。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

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();
        }
    }