gpt4 book ai didi

android - Firebase 在时间戳字段中使用 endAt

转载 作者:搜寻专家 更新时间:2023-11-01 07:47:12 24 4
gpt4 key购买 nike

我有这些字段的记录:

age: 25
timestamp: 1484089199472

此记录插入者:

@Exclude
public Map<String, Object> toMap() {
HashMap<String, Object> result = new HashMap<>();

result.put("age", age);
result.put("timestamp", ServerValue.TIMESTAMP);
return result;
}

如果我使用 endAt(24,"age") 比它的工作好,该项目是不可见的。

但是如果我想在时间戳中使用 endAt,它就不起作用了。例如:endAt(100000,"timestamp") 并且该行保持可见。为什么?

这是检查类型?

如何过滤?

我不知道! :(我希望有一个人可以帮助我!谢谢!

编辑:

查询获取实际日期行

 @Override
public Query getQuery(final DatabaseReference databaseReference) {
Date endTime = new Date();
endTime.setHours(23);
endTime.setMinutes(59);
endTime.setSeconds(59);

return databaseReference
.child("toplist")
.endAt(endTime.getTime(),"timestamp")
.orderByChild("point")
.limitToFirst(50);

}

数据

@IgnoreExtraProperties
public class Rank{

public int number;
public String username;
public int point;


// [START post_to_map]
@Exclude
public Map<String, Object> toMap() {
HashMap<String, Object> result = new HashMap<>();
result.put("number", number);
result.put("username", username);
result.put("point", point);
result.put("timestamp", ServerValue.TIMESTAMP);
return result;
}

}

添加新的随机元素

private void writeNewRandomTopListItem() {
Random rnd = new Random();
Rank item = new Rank();
item.username = "Test " + rnd.nextInt(20000);
item.point = rnd.nextInt(2000000);

mDatabase.child("toplist").push().setValue(item.toMap());
}

适配器

Query postsQuery = getQuery(mDatabase);
mAdapter = new FirebaseRecyclerAdapter<Rank, PostViewHolder>(Rank.class, R.layout.item_post, PostViewHolder.class, postsQuery) {
@Override
protected void populateViewHolder(final PostViewHolder viewHolder, final Rank model, final int position) {

viewHolder.bindToPost(model,position);
}
};
mRecycler.setAdapter(mAdapter);

...

 toplist
-Ka8m3hN-vRjPZhKH3Rt
number: 0
point: 1269424
timestamp: 148407253222471
username: "Test 19727"
-Ka8m3hWRIQKL7faNqUS
number: 0
point: 1398061
timestamp: 1484075322472
username: "Test 17679"

最佳答案

您应该首先按 timestamp 子节点对节点进行排序,然后在客户端按 points 对接收到的项目进行排序。这被描述为here .

我建议您改为使用此查询:

@Override
public Query getQuery(final DatabaseReference databaseReference) {
Date endTime = new Date();
endTime.setHours(23);
endTime.setMinutes(59);
endTime.setSeconds(59);

return databaseReference.child("toplist").orderByChild("timestamp")
.endAt(endTime.getTime()).limitToFirst(50);
}

通过这种方式,您可以告诉 Firebase 按节点的其中一个子节点对节点进行排序,在本例中为 timestamp。希望这会有所帮助。

接下来,您需要在客户端对数据进行排序。这样做的一个问题是,来自 firebase 的实时更改不会在 RecyclerView 中重新排序您的项目。

我再次推荐通读 this回答。

关于android - Firebase 在时间戳字段中使用 endAt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41576725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com