在 Recyclerview 中显示来自 Firebase 的数据,按用户名过滤 - 如何?

时间:2020-12-20 13:21:19

标签: java android firebase-realtime-database

使用以下代码行,我可以在用户“Hendrik”的“结果”下显示数据。

Query query = FirebaseDatabase.getInstance().getReference("users/Hendrik/results");

但我想要的是根据登录的用户显示“结果”下的数据。我想我应该使用 FirebaseAuth 来检查当前登录的是哪个用户?我不太确定,有人有什么建议吗?

数据库树

enter image description here

在我的片段中

private void setUpRecyclerView() {
        Query query = FirebaseDatabase.getInstance().getReference("users/Hendrik/results");

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

        adapter = new ResultAdapter(options);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(adapter);
    }

    @Override
    public void onStart() {
        super.onStart();
        if (adapter != null) {
            adapter.startListening();
        }
    }

    @Override
    public void onStop() {
        super.onStop();
        if (adapter != null) {
            adapter.stopListening();
        }
    }

我的适配器

public class ResultAdapter extends FirebaseRecyclerAdapter<Results, ResultAdapter.ResultViewHolder> {

public ResultAdapter(@NonNull FirebaseRecyclerOptions<Results> options){
    super(options);
}

@Override
public void onBindViewHolder(@NonNull ResultViewHolder holder, int position, @NonNull Results model) {

    holder.datum.setText(model.getDatum());
}

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


public static class ResultViewHolder extends RecyclerView.ViewHolder{

    TextView datum;
    ImageView resultaat1, resultaat2, resultaat3, resultaat4;
    public ResultViewHolder(@NonNull View itemView){
        super(itemView);

        datum = itemView.findViewById(R.id.datum);
        resultaat1 = itemView.findViewById(R.id.schietResultaat1);
        resultaat2 = itemView.findViewById(R.id.schietResultaat2);
        resultaat3 = itemView.findViewById(R.id.schietResultaat3);
        resultaat4 = itemView.findViewById(R.id.schietResultaat4);
    }
}
}

1 个答案:

答案 0 :(得分:1)

<块引用>

我想我应该使用 FirebaseAuth 来检查当前登录的是哪个用户?

是的。 FirebaseAuth 将为每个用户生成唯一的 ID,然后您可以像 Users->uid-> then details

一样构建您的数据

之后你可以这样做:

<块引用>

但我想要的是根据登录的用户显示“结果”下的数据

通过从 FirebaseAuth 获取当前登录用户的 uid,您的数据库查询将如下所示:

Query query = FirebaseDatabase.getInstance().getReference().child("users").child(uid).child("result");