DatabaseReference lastRef = FirebaseDatabase.getInstance().getReference().child("Ranklist");
Query lastQuery = lastRef.orderByKey().limitToLast(1);
lastQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot data) {
newUser.Rank=Long.parseLong(data.getKey().toString())+1;
OrderConsoleMessages();
texts[0].setText("Last Rank is: "+newUser.Rank+" | UID: " + data.getValue());
}
@Override
public void onCancelled(DatabaseError databaseError) {
OrderConsoleMessages();
texts[0].setText(databaseError.toString());
}
});
我的问题是如何从“排名列表”中检索最后一个孩子?我尝试使用orderByKey
ByValue,但在我的情况下没有任何效果。我没有收到任何错误,我想我根本没有从该查询中获得任何数据。
编辑:这是我从data.getValue()。toString->>> {4 = somekey4}中得到的
答案 0 :(得分:1)
您的代码正常工作。我测试了您对数据库的查询返回了父节点“ Ranklist”的最后一个子节点。将您的DatabaseReference dbref
设置为全球成员
dbRef = FirebaseDatabase.getInstance().getReference().child("Ranklist");
Query lastQuery = dbRef.orderByKey().limitToLast(1);
lastQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data : dataSnapshot.getChildren())
{
//if you call methods on dataSnapshot it gives you the required values
String s = data.getValue(); // then it has the value "somekey4"
String key = data.getKey(); // then it has the value "4:"
//as per your given snapshot of firebase database data
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}});
希望这对您有帮助...
快乐编码:-)
答案 1 :(得分:0)
在这种情况下,您不能使用查询。正如我在您的屏幕快照中看到的那样,Ranklist
节点是一个ArrayList
,要获取Ranklist
节点下的最后一个孩子的值,即somekey4
,请使用以下命令代码行:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = rootRef.child("Ranklist");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<String> arrayList = (ArrayList<String>) dataSnapshot.getValue();
String lastItem = arrayList.get(arrayList.size() - 1);
Log.d("TAG", lastItem);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
ref.addListenerForSingleValueEvent(valueEventListener);
您的logcat中的输出将为:somekey4
。
答案 2 :(得分:0)
您的代码是正确的,但是您仅获得“最后一个节点的密钥”。因此,您需要使用以下方式进行更改:
dbRef.child("Ranklist")
.orderByChild(Constants.ARG_CONV_TIMESTEMP)
.limitToLast(1)
.addChildEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue();
String key = dataSnapshot.getKey();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}});