从Firebase检索数据,映射到ArrayList中的元素并进行排序

时间:2019-03-29 01:13:09

标签: java android firebase firebase-realtime-database

我有一个ArrayList,代表游戏中的不同球队,他们的得分不同。在Firebase中,我为每个团队分配了一个点值。我不知道如何在Android Studio中获取该点值数据,以便对ArrayList进行排序。

到目前为止,我已经尝试过使用Comparable,但是我还没有使用它。我想使用TreeMap,但我认为ArrayList最适合这种情况。

database = FirebaseDatabase.getInstance();
        u1 = database.getReference("Hawkeyes");
        u2 = database.getReference("Lions");
        u3 = database.getReference("Tigers");
        sportTeams = new ArrayList<String>();

        sportTeams.add("Hawkeyes");
        sportTeams.add("Lions");
        sportTeams.add("Tigers");

在firebase中,它看起来像这样:

鹰眼-“ 20”

狮子-“ 64”

老虎-“ 25”

我希望能够以某种方式检索数据,以便我可以基于这些点值对ArrayList进行排序。我该怎么办?

2 个答案:

答案 0 :(得分:0)

我将您的问题解释为:“如何从Firebase读取数据并对数据进行排序”

您可能不想像现在那样存储数据,而是要像这样存储数据(这是数组通常在Firebase中的存储方式)

  • 随机UID
    • 团队名称
    • 团队得分
  • 随机UID
    • 团队名称
    • 团队得分

以此类推。...

您可以使用以下方法生成这些UID:

.push().getKey()

在任何DatabaseReference上。

要回答您的问题,您可以这样做(来自Firebase文档):

ref.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    Post post = dataSnapshot.getValue(Post.class);
    System.out.println(post);
  }

  @Override
  public void onCancelled(DatabaseError databaseError) {
    System.out.println("The read failed: " + databaseError.getCode());
  }
});

“ dataSnapshot”的值将是您的DatabaseReference对象包含为快照的值。您可以使用.getValue(ClassName.class)方法将这些值作为对象访问。因此,如果您的Team对象具有“名称”属性和“得分”属性,则可以从Firebase作为Team对象获取这些值。

现在,要对这些值进行排序,您可以使用任何排序算法来组织这些团队(按字母顺序或基于得分)。例如,您可以使用快速排序或插入排序。

更多有关排序的信息:

https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=2ahUKEwjO94DHm6bhAhUMP6wKHYQZCfMQwqsBMAF6BAgIEAQ&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DPgBzjlCcFvc&usg=AOvVaw2R-qjBfc9H9YEivdMxn7r_

https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=18&cad=rja&uact=8&ved=2ahUKEwi-o8y7m6bhAhUqgK0KHbtKBIQQwqsBMBF6BAgLEAQ&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DOGzPmgsI-pQ&usg=AOvVaw0ExA52VpJJrxjnxfruRhy4

答案 1 :(得分:0)

您可以使用

Collections.sort(your_arrayList);
Collections.reverse(your_arrayList);

要对团队的数量进行排序,首先获取它们,然后应用它,或者仅对对象数据使用comparable