所以我一直想知道几天,但似乎没有得到正确的答案。我有一个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点之间的时间。
答案 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