gpt4 book ai didi

java - 从数据库中获取最高 10 个值并显示在 RecyclerView 中

转载 作者:行者123 更新时间:2023-12-02 09:34:39 25 4
gpt4 key购买 nike

我在 Top Child 中有 UID。在 Top Child 下,我还有 2 个 child :Name 和 Exchange。我想获取排名靠前的交换值并在 recyclerview 中显示它们。最高的交换将在顶部,第二顶部将在第二位置,第三将在第三位置。我使用 firebaserecycladapter 连续获取所有值。但我想将最高值获取到最低值。

这是数据库结构:enter image description here

这是类(class):

TopRef = FirebaseDatabase.getInstance().getReference().child("Top");
recyclerView = views.findViewById(R.id.topRec);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);


Query query = TopRef.orderByChild("Exchange").limitToLast(20);
FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<TopAdapter>()
.setQuery(query,TopAdapter.class)
.build();


adapter = new FirebaseRecyclerAdapter<TopAdapter, TopFragment.TopAdapterHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final TopFragment.TopAdapterHolder holder, int position, @NonNull TopAdapter model) {
String userIds = getRef(position).getKey();
assert userIds != null;
TopRef.child(userIds).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild("Name")){
String name = dataSnapshot.child("Name").getValue(String.class);
Long exchange = dataSnapshot.child("Exchange").getValue(Long.class);




holder.Name.setText(name);
holder.Exchange.setText(String.valueOf(exchange));




}


}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});

}




@NonNull
@Override
public TopFragment.TopAdapterHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.topview,viewGroup,false);
return new TopFragment.TopAdapterHolder(view);
}
};



recyclerView.setAdapter(adapter);

这是适配器类:

public class TopAdapter {
String Name;
String Exchange;



public TopAdapter() {

}


public TopAdapter(String name, String exchange) {
Name = name;
Exchange = exchange;
}

public String getName() {
return Name;
}

public String getExchange() {
return Exchange;
}
}

崩溃日志:发现两个 getter 或字段的属性:交换存在大小写冲突

最佳答案

按降序排列数据的最简单方法是在客户端。为了根据 Exchange 属性的最高值获取 Top 子级中的所有这些对象,首先,您需要使用查询,然后选择三个选项之一。因此,不要将 TopRef 传递给 setQuery() 方法,而是传递以下查询:

Query query = TopRef.orderByChild("Exchange").limitToLast(20);

如您所见,默认情况下,使用此查询 Firebase 会按给定属性以升序对结果进行排序。 Firebase 中没有方法按降序排序,但可以进行一些调整。

如果您使用RecyclerView来显示数据,最简单的方法是使用以下代码:

LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);

此方法将直接在您的 RecyclerView 中反转顺序。

另一种方法是创建您自己的适配器来扩展 FirebaseListAdapter 并重写 getItem() 方法。

另一种方法是从数据库获取数据,将其添加到Collection中,List将是一个很好的解决方案,然后使用Collections。反向(你的列表);。在这种情况下,您将失去 Firebase-UI 的功能。

编辑:

FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<TopAdapter>()
.setQuery(query,TopAdapter.class) //Changed
.build();

关于java - 从数据库中获取最高 10 个值并显示在 RecyclerView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57636713/

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