嘿,我想将存储在 firebase 数据库中的时间作为字符串按升序排序并将其显示在列表中。我找到了有关对整数值进行排序的解决方案。
这是我的数据库,我想根据该特定问题 ID 处每个用户 ID 的 timeTaken 进行排序。 编辑: 所以我的问题是如何从每个用户在该问题 ID 上花费的特定时间的 UID 中检索数据(此处:982906)并对该列表进行排序以检索谁在最短的时间内解决了问题.
private void getTimeTaken() {
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("users");
Query query = databaseReference.orderByChild("questions").startAt("982906");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
yourTimeArraylist = new ArrayList<>();
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
UserPuzzleDetails userPuzzleDetails = postSnapshot.getValue(UserPuzzleDetails.class);
yourTimeArraylist.add(new UserPuzzleDetails(userPuzzleDetails.getYourAnswer(), userPuzzleDetails.getAnswerScore(), userPuzzleDetails.getTimeTaken()));
Log.e("", " " + userPuzzleDetails.getTimeTaken());
}
for (int i = 0; i < yourTimeArraylist.size(); i++) {
UserPuzzleDetails user = yourTimeArraylist.get(i);
Log.d("test your rank", " onDataChange: " + user.getTimeTaken() + " " + user.getAnswerScore());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
我已将数据库中的时间值更改为以毫秒为单位的 int,但无法理解如何根据所用时间对问题 id 982906 的值进行排序。我试过上面的方法,每次都返回0。
最佳答案
Firebase 数据库根据您指定的单个属性(或其他条件)过滤紧邻您查询的位置下的子项。查询不能基于子节点下的动态路径。
您以不允许此查询的方式嵌套数据:每个答案都是树中更深的一个动态级别:“/users/$uid/questions/$qid”。这是众多原因之一为什么 Firebase 文档建议不要以这种方式嵌套数据。
如果您想按“所用时间”查询所有用户的答案列表,则应将其精确存储在数据库中:答案列表,每个答案都包含“所用时间”。
questionAnswers
$questionId
$uid
timeTaken: "08:17:23.6"
现在您可以通过以下方式获得问题 42 的 10 个最快答案:
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
DatabaseReference answersReference = databaseReference.child("42");
Query query = answersReference.orderByChild("timeTaken");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot userAnswerSnapshot: dataSnapshot.getChildren()) {
System.out.println("User "+userAnswerSnapshot.getKey()+" took "+userAnswerSnapshot.child("timeTaken").getValue());
}
}
关于java - Android:按升序对存储在firebase数据库中的时间进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42460361/