gpt4 book ai didi

java - 如何对Firebase数据库中的数据进行升序排序

转载 作者:行者123 更新时间:2023-12-02 11:27:32 25 4
gpt4 key购买 nike

嗨,我正在尝试按升序对用户进行排序,首先这是我的树: enter image description here我想按 scoreTotal 对用户进行排序,我尝试使用 categries.orderByChild("scoreTotal").orderByValue() 但不起作用,这是我的代码:

public class Scores extends  Fragment {

RecyclerView userlist;
int i = 0;
RecyclerView.LayoutManager layoutManager;
FirebaseRecyclerAdapter<User, usersViewHolder> adapter;
FirebaseDatabase database;
ProgressBar loading;
DatabaseReference categries, mDatabase;

public Scores() {
// Required empty public constructor
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
categries = FirebaseDatabase.getInstance().getReferenceFromUrl("https://quizapp.firebaseio.com/Quizy/users");

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_scores, container, false);
userlist = v.findViewById(R.id.users);
loading = v.findViewById(R.id.progress);
layoutManager = new GridLayoutManager(getActivity(), 1);
userlist.setLayoutManager(layoutManager);
userlist.setHasFixedSize(true);
mDatabase = FirebaseDatabase.getInstance().getReference();
loadCategories();
return v;
}

private void loadCategories() {

adapter = new FirebaseRecyclerAdapter<User, usersViewHolder>(User.class, R.layout.useitem, usersViewHolder.class, categries.orderByChild("scoreTotal").orderByValue()) {
@SuppressLint("CheckResult")
@Override
protected void populateViewHolder(final usersViewHolder viewHolder, final User model, int position) {
viewHolder.getUserName().setText(model.getUsername());
viewHolder.getUserScore().setText("Score : "+model.getScoreTotal());
RequestOptions requestOptions = new RequestOptions();
requestOptions.diskCacheStrategy(DiskCacheStrategy.ALL).dontTransform();
Glide.with(getActivity()).load(model.getImageBase64()).apply(requestOptions).listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}

@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
viewHolder.getProgressBar().setVisibility(View.GONE);
viewHolder.getUserpic().setVisibility(View.VISIBLE);
return false;

}
}).into(viewHolder.getUserpic());
}


@Override
public usersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
usersViewHolder viewHolder = super.onCreateViewHolder(parent, viewType);
viewHolder.setItemOnClick(new itemOnClick() {
@Override
public void onClick(View v, int pos, boolean isLong) {

}
});
return viewHolder;
}
};
adapter.notifyDataSetChanged();
userlist.setAdapter(adapter);

}
}

最佳答案

scoreTotal 是数据库中的一个字符串。

如果您将值作为数字(通常是整数)上传,则不会有引号。

最快的解决方案是重新评估您的上传代码以发送 int。我强烈建议这种方法,因为它是迄今为止最快的。

顺便说一句,您需要将 ".indexOn": ["scoreTotal"] 添加到数据库规则中。

此外,如有必要,您可以在上传之前使用云函数解析该字符串(即,由于某种原因无法直接上传 int)。

您也可以在客户端对它们进行实用的解析和排序,但因为这是最严格的解决方案,所以我不会对其进行解释。

关于java - 如何对Firebase数据库中的数据进行升序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49502323/

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