Firebase数据库搜索数据

时间:2018-04-01 04:07:22

标签: android firebase firebase-realtime-database

所以我一直想知道几天,但似乎没有得到正确的答案。我有一个Firebase数据库,我想在一个孩子中搜索数据。现在,我在这里看到了曼尼的好例子。我知道如何搜索特定数据:

                mDatabaseReference.orderByChild("Time").equalTo("10:00").
                        addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                for (DataSnapshot userSnapshot: dataSnapshot.getChildren()){
                                    System.out.println(userSnapshot.getKey());
                                    System.out.println(userSnapshot.child("time").getValue(String.class));
                                }
                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {
                                    throw databaseError.toException();
                            }
                        });

在上面的示例中,我可以在我的子数据库中搜索"10:00"。它运作得很好,我在这里有一个例子“Search in firebase database for android?”。 问题是,我有一个时间选择器。时间选择器数据存储在textView中。像这样:

 pickTimeTextView = findViewById(R.id.timePickTextView);

on on Onclick for the time picker:

 pickTimeTextView.setText("");

在OnTimeSet上:

 pickTimeTextView.setText(String.format(getString(R.string.hour_selected) + "%02d:%02d", hourOfDay, minute));

我的问题是,我是否有机会使用textView的内容搜索我的firebase数据库? textView中的String将随着我在时间选择器中选择的时间而变化。 你们觉得我能用firebase做到这一点吗?如果没有,你能指出我正确的方向吗?提前谢谢!

稍后编辑:

我将查询放在OnTimeSetListner中(没有格式时它不起作用):

@Override
public void onTimeSet(TimePickerDialog view, int hourOfDay, int minute, int second) {
    pickTimeTextView.setText(String.format(getString(R.string.hour_selected) + "%02d:%02d", hourOfDay, minute));

    String hours = (hourOfDay < 10) ? "0" + hourOfDay : hourOfDay;

    mDatabaseReference.orderByChild("users").equalTo(hourOfDay + minute).
            addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot userSnapshot: dataSnapshot.getChildren()){
                        System.out.println(userSnapshot.getKey());
                        System.out.println(userSnapshot.child("users").getValue(String.class));
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    throw databaseError.toException();
                }
            });

}

我尝试按照cutiko的指示格式化小时和分钟参数,但是当我这样做时,我收到了这个错误:

  

不兼容的类型。   需要:   java.lang.String中   实测:   java.io.Serializable&amp; java.lang.Comparable的

我再读一遍我所写的内容而且我并不瘦,我以最好的方式解释了这个问题。 我想在firebase db中搜索以查看是否已存储所选的(用户的时间)。如果是,则向用户发送错误。我使用时间选择器来选择时间和限制时间选择器,仅显示上午8点到11点之间的时间。

1 个答案:

答案 0 :(得分:0)

TimePickers有一个时间选择的侦听器。选择时间后再次运行查询。 我能看到的唯一问题是,定时器选择的侦听器有小时和分钟参数,该区域少于十个单位数,因此你必须格式化;

//First you have to concatenate the argument you are looking to query

String hours = (h < 10) ? "0"+h : String.valueOf(h);
Stting minutes = (m < 10) ? "0"+h : String.valueOf(m);

//Your harcoded argument is like this "hh:mm"
//so we have to concatenate a String like that
String argument = hours + ":" minutes;

//Then pass the argument to the query
mDatabaseReference.orderByChild("users").equalTo(argument)...

文档对论点,时间和分钟有很好的解释 https://developer.android.com/reference/android/widget/TimePicker.OnTimeChangedListener.html