我正在使用a FirebaseRecyclerAdapter
来RecyclerView
扩充Firebase实时数据库提供的数据.
我开始按他们的孩子对节点进行排序,该子节点date
被设置为值ServerValue.TIMESTAMP
.我向indexOn
要使用date
Firebase数据库规则值排序的节点的父节点添加了一个属性.
"parent-node": { ".read": "auth != null", ".write": "auth != null", ".indexOn" : "date", ... },
这工作正常,但更新的节点添加到我的结尾RecyclerView
.作为FirebaseRecyclerAdapter
和它的FirebaseArray
添加节点ChildEventListener
,它意味着数据从最旧到最新排序.
我设法通过使用负值来反转这个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) { if (!(Long.parseLong(dataSnapshot.getValue().toString()) < 0)) { timestampReference.child(timestampKey).setValue(0 - Long.parseLong(dataSnapshot.getValue().toString())); } else { 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()); } }); }
现在我要排序的节点看起来像这样.
{ "-K_tlLWVO21NXUjUn6ko" : { "date" : -1483806697481, "debug" : "old", ... }, "-K_tmjVqTUcKXHaQDphk" : { "date" : -1483807061979, "debug" : "newer", ... }, "-K_uC-AJIvDOuBzhJ3JJ" : { "date" : -1483813945897, "debug" : "newest", ... } }
它们从最新到最旧排序,并RecyclerView
按照我的要求添加到我的顶部.
来到我的个人问题:
这是从最新到最旧的节点排序的正确方法吗?这对我来说似乎是一个很大的解决方法.
我错过了什么吗?
提前致谢!
编辑:我刚刚看到我的prepareUpload()
方法无用地再次将负值发送到数据库,之后再次接收它...我将更改此值以计算客户端的负值.请忽略这一点.