我的結構檢索數據就像下面火力地堡:由子值排序
- Posts
- keu23jndf
- dateTime:"2376464"
- name:"abc"
- key34njf
- dateTime:"4333434"
- name:"xyz"
現在,我要以降序來檢索日期時間排序的數據。
感謝
我的結構檢索數據就像下面火力地堡:由子值排序
- Posts
- keu23jndf
- dateTime:"2376464"
- name:"abc"
- key34njf
- dateTime:"4333434"
- name:"xyz"
現在,我要以降序來檢索日期時間排序的數據。
感謝
好了,所以首先我會建議你不要使用客戶端片面的時間戳,而是使用ServerValue.TIMESTAMP
。在大多數情況下,這將是更好的設置。如果你知道自己在做什麼,並且想要完全如此,那就忘記這一點,然後繼續閱讀。
如果你想從最新到最舊排序的問題是,Firebase確實(據我所知)不支持這一點。
解決方法是使用Firebase ServerValue.TIMESTAMP
的負值。
這就是我的做法。 它可能不是完美的或正確的方式,但它的工作
private void prepareUpload() {
//mDatabase is a reference to the root of the Firebase Database
final DatabaseReference timestampReference = mDatabase.child("timestamp");
final String timestampKey = timestampReference.push().getKey();
timestampReference.child(timestampKey).setValue(ServerValue.TIMESTAMP);
timestampReference.child(timestampKey).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
Long timestamp = 0 - Long.parseLong(dataSnapshot.getValue().toString());
upload(/*Starting upload with new timestamp here (this is just a dummy method)*/);
timestampReference.child(timestampKey).removeValue();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG, databaseError.getMessage());
}
});
}
現在你必須設置你的火力地堡數據庫規則如下:
"Posts": {
".indexOn" : "date",
...
}
最後你只需要查詢您的'Posts'
不知怎麼這樣的:
mDatabase.child("Posts").orderByChild("dateTime").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
//Do stuff with your data
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
希望這有助於!
使用哪種代碼語言?你想將它們從最新到最舊還是反向排序?這是什麼時間戳? – hotrod
我正在使用Android,我想將它們從最新到最舊排序。 Timestamp就像Long timestamp = System.currentTimeMillis()/ 1000; –