【问题标题】:Firebase Realtime Database, can't check the db for existing data and push if not existentFirebase 实时数据库,无法检查数据库中的现有数据,如果不存在则推送
【发布时间】:2018-04-03 06:09:20
【问题描述】:

我有几个编辑文本,两个时间选择器和两个日期选择器,所有这些都受到限制(时间和日期选择器)。两个时间和日期选择器用于 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 时间和日期选择器,它将存储“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) {

                    }
                });

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

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

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

    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 消息
    • 检查我编辑的答案..确保pick_time与保存的格式相同
    • 别忘了.equalTo(picked_time)
    • 谢谢!我又试了一次,此时我不知道我做错了什么。在 onDataChange 中,当我尝试添加孩子时,它不起作用。我明白了(无法解析方法'child(java.lang.String))。我指的是: if ((dataSnapshot.getChildren().*here*child("userTime").getValue()).contains(picked_time))
    • DataSnapshot item = dataSnapshot.getChildren() 然后item.child("userTime")
    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 2021-11-27
    • 2021-08-28
    • 2019-11-28
    • 1970-01-01
    • 2020-08-18
    • 2020-10-15
    • 2017-10-06
    相关资源
    最近更新 更多