gpt4 book ai didi

java - 如何使用不在 "Query-Collection"中的值对 Firestore RecyclerView 项目进行排序? (社交排行榜)

转载 作者:行者123 更新时间:2023-12-01 18:31:04 25 4
gpt4 key购买 nike

我有一个 RecyclerView 适配器,它应该显示所有用户 friend 的分数,所以基本上是一个社交排行榜。使用适配器,我从 friend 那里获取 uid,然后在 onBindViewHolder 中进行查询,以获取每个 friend 的头像 ID 和用户名,以及他当前的分数。

这一切正常,但现在我想在玩家得分之后对 RecyclerView 进行排序。由于我只有集合中每个 friend 的 uid,而不是分数,因此我无法使用以下代码:

Query query = userRef.orderBy("uid", Query.Direction.ASCENDING);

有没有办法在“RecyclerView集合”中没有分数的情况下,将RecyclerView排序在玩家的分数之后?因此,如果不将分数与 uid 放在同一集合中,这将导致大量的读取和写入。我知道有比较器运算符,但我不知道如何在这种情况下使用它。

这是我的适配器,我希望其中的项目按值 pointsInt

排序
public class LeaderboardAdapter extends FirestoreRecyclerAdapter<Users, LeaderboardAdapter.UserHolder> {
private OnItemClickListener listener;

private String avatar_id_player_2, mUid, mCurrentUser;
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();

public LeaderboardAdapter(@NonNull FirestoreRecyclerOptions<Users> options) {
super(options);

}

@Override
protected void onBindViewHolder(@NonNull UserHolder holder, int position, @NonNull Users model) {

holder.textViewUsername.setText(model.getUsername());

mCurrentUser = currentUser.getUid();

mUid = model.getUid();

db.collection("User").document(mUid).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null) {

String username = document.getString("username");
avatar_id_player_2 = document.getString("avatar_id");

holder.textViewUsername.setText(username);
Picasso.get().load(avatar_id_player_2).placeholder(R.mipmap.ic_launcher).into(holder.circleImageView);

db.collection("User").document(mUid).collection("Points").document("Points")
.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null) {

Integer pointsInt = document.getLong("points").intValue();
holder.textViewScore.setText("" + pointsInt);
}
}
}
});
}
}
}
});
}

@NonNull
@Override
public UserHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem_leaderboard, parent, false);
return new UserHolder(view);
}

class UserHolder extends RecyclerView.ViewHolder {

public TextView textViewUsername, textViewScore;
CircleImageView circleImageView;

public UserHolder(@NonNull View itemView) {
super(itemView);

textViewUsername = itemView.findViewById(R.id.leaderboard_username);
circleImageView = itemView.findViewById(R.id.leaderboard_avatar);
textViewScore = itemView.findViewById(R.id.leaderboard_score);

}
}

...
}

这是我构建数据库的方式。这里我获取好友的值(当前该用户有一个好友),然后按照前面的说明进行查询以获取该玩家的分数/分值:

enter image description here

这是我获取值的集合,然后我想在 RecyclerView 中对它进行排序:

enter image description here

在这里您可以看到我的 RecyclerView 现在的样子。这里当前玩家有 2 个 friend ,但最高分数并不高于最低分数,因为它是按玩家的盖子值排序的:

enter image description here

最佳答案

您需要将数据转换为List of Object通过创建 Model class完成此操作后,您可以排序 List<Object>使用

Collections.sort(userPointList, (item1, item2) -> {
int firstUser = item1.getPoint() ? 0 : 1;
int secondUser = item2.getPoint() ? 0 : 1;

return first - second; // Ascending
}); // using JAVA 1_8

询问您是否需要更多帮助:)

希望这会有所帮助!

关于java - 如何使用不在 "Query-Collection"中的值对 Firestore RecyclerView 项目进行排序? (社交排行榜),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60166038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com