java - Android:按升序对存储在firebase数据库中的时间进行排序

标签 java android firebase firebase-realtime-database

嘿,我想将存储在 firebase 数据库中的时间作为字符串按升序排序并将其显示在列表中。我找到了有关对整数值进行排序的解决方案。 database

这是我的数据库,我想根据该特定问题 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/

相关文章:

java - 使用 Python-Selenium 启动 IE 时出错,而完全相同的脚本在 Java-Selenium 上运行良好

java - 在JavaFX按钮中显示dicom

firebase - 无法从Firebase读取List,始终在snapshot.data上返回null

javascript - Firebase 自动删除功能在 2 小时后要求删除时以秒为单位删除元素

javascript - 从 Firestore 收到图像时如何等待 promise ?

java - 使用 vuze API 限制带宽

java - 你能在 Java EE Web 应用程序中实现 Vue.js 吗?

Android Emulator "To Start Android, enter your password",它提醒我密码错误”

android - 创建 PDF 时出错

android - 在 Android 终端中运行 Python for Android (Qpython)