根据ServerValue.TIMESTAMP查询Firebase

时间:2017-01-01 13:01:08

标签: android firebase firebase-realtime-database firebaseui

我有一个FireBase后端,它有一个像这样的时间戳......这些节点中有很多是被推送的对象。

DB set up

每个节点都有一个使用ServerValue.TIMESTAMP设置的时间戳。

在数据模型类设置服务器时间

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

以上一切都可以在DB中插入,我可以检索时间。

在另一个类中,我想在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);

但也没有vail

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:2)

您需要对要返回的子项上方的位置运行查询,该查询看起来是数据库的根目录(请不要发布带有模糊文本的图片,然后将实际的JSON发布为文本时间)。

如果您确实需要数据库根目录下的级别,则可以使用以下命令查询日期:

DatabaseReference root = FirebaseDatabase.getInstance().getReference();
Query query = root.orderByChild("timestampCreated/date").endAt(daysInPast);