android - 使用回收视图从 Firebase 检索实时数据
问题描述
我想检索在回收视图中具有 request_type “received” 的唯一孩子,但我有一个问题打击代码检索当前用户的所有孩子,它们都具有 request_type “sent” 和 “received”
这是我的代码
public class RequestFragment extends Fragment {
private View requestview;
private RecyclerView requestlist;
private DatabaseReference requestref,userref;
private FirebaseAuth mAuth;
private String currentuserID;
public RequestFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
requestview = inflater.inflate(R.layout.fragment_request, container, false);
requestlist = requestview.findViewById(R.id.requestlist);
requestlist.setLayoutManager(new LinearLayoutManager(getContext()));
mAuth = FirebaseAuth.getInstance();
currentuserID = mAuth.getCurrentUser().getUid();
requestref = FirebaseDatabase.getInstance().getReference().child("chat request");
userref = FirebaseDatabase.getInstance().getReference().child("users");
return requestview;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerOptions options =
new FirebaseRecyclerOptions.Builder<contact>()
.setQuery(requestref.child(currentuserID),contact.class)
.build();
FirebaseRecyclerAdapter<contact,RequestViewHolder> adapter =
new FirebaseRecyclerAdapter<contact, RequestViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final RequestViewHolder holder, int position, @NonNull contact model)
{
holder.itemView.findViewById(R.id.request_accept_btn).setVisibility(View.VISIBLE);
holder.itemView.findViewById(R.id.request_cancle_btn).setVisibility(View.VISIBLE);
final String list_user_id = getRef(position).getKey();
DatabaseReference getTypeRef = getRef(position).child("request_type").getRef();
getTypeRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
String type = dataSnapshot.getValue().toString();
if (type.equals("received"))
{
userref.child(list_user_id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild("image")){
String profile = dataSnapshot.child("image").getValue().toString();
String userstatus = dataSnapshot.child("status").getValue().toString();
String username = dataSnapshot.child("name").getValue().toString();
holder.username.setText(username);
holder.userstatus.setText(userstatus);
Picasso.get().load(profile).placeholder(R.drawable.defaultprofile).into(holder.userimage);
}
else {
String userstatus = dataSnapshot.child("status").getValue().toString();
String username = dataSnapshot.child("name").getValue().toString();
holder.username.setText(username);
holder.userstatus.setText(userstatus);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@NonNull
@Override
public RequestViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.user_display_layout,viewGroup,false);
RequestViewHolder requestViewHolder = new RequestViewHolder(view);
return requestViewHolder;
}
};
requestlist.setAdapter(adapter);
adapter.startListening();
}
public static class RequestViewHolder extends RecyclerView.ViewHolder
{
TextView username,userstatus;
CircleImageView userimage;
Button accept,cancle;
public RequestViewHolder(@NonNull View itemView)
{
super(itemView);
username = itemView.findViewById(R.id.user_profile_name);
userstatus = itemView.findViewById(R.id.user_status);
userimage = itemView.findViewById(R.id.user_profile_image);
accept = itemView.findViewById(R.id.request_accept_btn);
cancle = itemView.findViewById(R.id.request_cancle_btn);
}
}
}
这段代码给了我当前用户的所有三个孩子,但我只想要在回收视图中请求类型为“received”的孩子
解决方案
您可以在早期设置查询,即FirebaseRecyclerOptions
. 像这样的东西。
//Creating query for specific condition
Query queryRequestType = requestref.orderByChild("request_type").equalTo("received");
FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<contact>()
.setQuery(queryRequestType, contact.class)
.build();
推荐阅读
- ios - 如何在 FSCalendar 中将事件标记为大色圈?
- mongodb - 使用 PowerBI 的 MongoDB 直接查询
- javascript - 如何重构 JSON 对象?
- c# - 如何使用 LINQ 从每组中获取最大版本的记录?
- python - 如何创建一个算法来计算平均值
- android - 如何更新适配器数据列表?
- android - 从片段调用 Android AsyncTask 没有调用其成员 - doInbackground、onpreexecute、onpostexecute
- r - 如何将几个 NA 作为行添加到数据框中?
- lua - 如何使用 Luarocks 将模块安装到 Luajit
- java - 数组的运行长度编码