我想使用 Firebase 提供的服务器时间戳设置计算优先级
I want to set a calculated priority using the server timestamp provided by Firebase
我想使用 Firebase 提供的服务器时间戳设置 child 的优先级,ServerValue.TIMESTAMP
:
mFirebaseref.child(userid).setPriority(ServerValue.TIMESTAMP);
但我的情况正好相反。我想设置负 ServerValue.TIMESTAMP
以根据时间将我的 child 移到顶部。是否可以在不使用本地时间戳的情况下在 Firebase 中执行此操作 System.CurrentTimeInMillis()
?
我想做这样的事情:
mFirebaseref.child(userid).setPriority(-ServerValue.TIMESTAMP);
在客户端,ServerValue.TIMESTAMP
是一个结构如下的对象:{.sv: "timestamp"}
所以,如您所知,您不能轻易地做自己想做的事。但是,可能有不同的解决方案。例如,如果您想要最近的五个条目,您仍然可以通过 ServerValue.TIMESTAMP
:
设置优先级
mFirebaseref.child(userid).setPriority(ServerValue.TIMESTAMP);
然后使用limitToLast()
方法:
Query queryRef = mFirebaseref.limitToLast(5);
获取最近的五个条目。
此外,这可能会有所帮助:Display posts in descending posted order
你基本上是在问如何获得负服务器时间戳,它应该可以离线工作。我找到了一种方法,您可以使用一个隐藏字段。文档片段:
Firebase offsetRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/.info/serverTimeOffset");
offsetRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
double offset = snapshot.getValue(Double.class);
double estimatedServerTimeMs = System.currentTimeMillis() + offset;
}
@Override
public void onCancelled(FirebaseError error) {
System.err.println("Listener was cancelled");
}
});
我想使用 Firebase 提供的服务器时间戳设置 child 的优先级,ServerValue.TIMESTAMP
:
mFirebaseref.child(userid).setPriority(ServerValue.TIMESTAMP);
但我的情况正好相反。我想设置负 ServerValue.TIMESTAMP
以根据时间将我的 child 移到顶部。是否可以在不使用本地时间戳的情况下在 Firebase 中执行此操作 System.CurrentTimeInMillis()
?
我想做这样的事情:
mFirebaseref.child(userid).setPriority(-ServerValue.TIMESTAMP);
在客户端,ServerValue.TIMESTAMP
是一个结构如下的对象:{.sv: "timestamp"}
所以,如您所知,您不能轻易地做自己想做的事。但是,可能有不同的解决方案。例如,如果您想要最近的五个条目,您仍然可以通过 ServerValue.TIMESTAMP
:
mFirebaseref.child(userid).setPriority(ServerValue.TIMESTAMP);
然后使用limitToLast()
方法:
Query queryRef = mFirebaseref.limitToLast(5);
获取最近的五个条目。
此外,这可能会有所帮助:Display posts in descending posted order
你基本上是在问如何获得负服务器时间戳,它应该可以离线工作。我找到了一种方法,您可以使用一个隐藏字段。文档片段:
Firebase offsetRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/.info/serverTimeOffset");
offsetRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
double offset = snapshot.getValue(Double.class);
double estimatedServerTimeMs = System.currentTimeMillis() + offset;
}
@Override
public void onCancelled(FirebaseError error) {
System.err.println("Listener was cancelled");
}
});