基于 ServerValue.TIMESTAMP 查询 Firebase
Querying Firebase based on ServerValue.TIMESTAMP
我有一个 FireBase 后端,它有一个像这样的时间戳...这些节点中有许多是已推送的对象。
每个节点都有一个时间戳设置 ServerValue.TIMESTAMP。
在数据模型中class设置服务器时间
private HashMap<String, Object> timestampCreated;
//set time stamp in constructor when new obj is created
public DataModel(...){
// TIME STAMP
HashMap<String, Object> timestampCreatedObj = new HashMap<String, Object>();
timestampCreatedObj.put("date", ServerValue.TIMESTAMP);
this.timestampCreated = timestampCreatedObj;
}
//getting timestamp
public HashMap<String, Object> getTimestampCreated(){
return timestampCreated;
}
@Exclude
public long getTimestampCreatedLong(){
return (long)timestampCreated.get("date");
}
以上都可以很好地插入数据库,我可以检索时间。
在另一个 class 中,我想在 FirebaseListAdapter 上设置查询
设置查询可以说是显示最近 5 天的项目。
long daysInpast= new Date().getTime() - TimeUnit.MILLISECONDS.convert(5, TimeUnit.DAYS);
然后我设置查询
Query queryDays= mDatabaseQuery.child("timestampCreated").orderByChild("date").endAt(daysInpast);
final FirebaseListAdapter<myData> adapterQuery = new FirebaseListAdapter<myData>
(getActivity(), myData.class, R.layout.list_item, queryDays) {//do stuff}
这是我不确定的查询,我的列表返回空,如果我只是使用我的 FirebaseListAdapter 而没有传递数据库引用的查询,我的列表会按预期填充。我怀疑它的数据是如何布局的?他事实上我的时间点击在一个子节点中,这是一个问题吗?
我试过只使用
Query queryDays= mDatabaseQuery.orderByChild("date").endAt(daysInpast);
也有但没有用
感谢任何帮助
您需要 运行 在您想要返回的 children 上方的位置进行查询,该位置看起来是您数据库的根目录(请不要 post 图片文本模糊,post 实际 JSON 作为下次文本)。
如果您确实需要数据库根目录下的级别,您可以通过以下方式查询日期:
DatabaseReference root = FirebaseDatabase.getInstance().getReference();
Query query = root.orderByChild("timestampCreated/date").endAt(daysInPast);
我有一个 FireBase 后端,它有一个像这样的时间戳...这些节点中有许多是已推送的对象。
每个节点都有一个时间戳设置 ServerValue.TIMESTAMP。
在数据模型中class设置服务器时间
private HashMap<String, Object> timestampCreated;
//set time stamp in constructor when new obj is created
public DataModel(...){
// TIME STAMP
HashMap<String, Object> timestampCreatedObj = new HashMap<String, Object>();
timestampCreatedObj.put("date", ServerValue.TIMESTAMP);
this.timestampCreated = timestampCreatedObj;
}
//getting timestamp
public HashMap<String, Object> getTimestampCreated(){
return timestampCreated;
}
@Exclude
public long getTimestampCreatedLong(){
return (long)timestampCreated.get("date");
}
以上都可以很好地插入数据库,我可以检索时间。
在另一个 class 中,我想在 FirebaseListAdapter 上设置查询 设置查询可以说是显示最近 5 天的项目。
long daysInpast= new Date().getTime() - TimeUnit.MILLISECONDS.convert(5, TimeUnit.DAYS);
然后我设置查询
Query queryDays= mDatabaseQuery.child("timestampCreated").orderByChild("date").endAt(daysInpast);
final FirebaseListAdapter<myData> adapterQuery = new FirebaseListAdapter<myData>
(getActivity(), myData.class, R.layout.list_item, queryDays) {//do stuff}
这是我不确定的查询,我的列表返回空,如果我只是使用我的 FirebaseListAdapter 而没有传递数据库引用的查询,我的列表会按预期填充。我怀疑它的数据是如何布局的?他事实上我的时间点击在一个子节点中,这是一个问题吗?
我试过只使用
Query queryDays= mDatabaseQuery.orderByChild("date").endAt(daysInpast);
也有但没有用
感谢任何帮助
您需要 运行 在您想要返回的 children 上方的位置进行查询,该位置看起来是您数据库的根目录(请不要 post 图片文本模糊,post 实际 JSON 作为下次文本)。
如果您确实需要数据库根目录下的级别,您可以通过以下方式查询日期:
DatabaseReference root = FirebaseDatabase.getInstance().getReference();
Query query = root.orderByChild("timestampCreated/date").endAt(daysInPast);