Показать данные из Firebase в Recyclerview, отфильтрованные по имени пользователя — как?

С помощью следующей строки кода я могу показать данные в разделе «Результаты» пользователя «Хендрик».

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

Но я хочу показать данные в разделе «результаты», в соответствии с которыми пользователь вошел в систему. Я думаю, что должен работать с FirebaseAuth, чтобы проверить, какой пользователь в настоящее время вошел в систему? Я не совсем уверен, у кого-нибудь есть предложения?

Дерево базы данных

Внутри моего фрагмента

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);
    }
}
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
287
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что я должен работать с FirebaseAuth, чтобы проверить, какой пользователь в настоящее время вошел в систему?

Да. FirebaseAuth будет генерировать уникальные идентификаторы для каждого пользователя, после чего вы сможете структурировать свои данные, например Users->uid-> then details

После этого вы можете сделать это:

Но я хочу показать данные в разделе «результаты», в соответствии с которыми пользователь вошел в систему.

получить uid текущего вошедшего в систему пользователя из FirebaseAuth, и ваш запрос к базе данных будет выглядеть так:

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

Должен ли я вручную изменить значения под "users" на "uid", чтобы FirebaseAuth знал, что давать уникальный идентификатор?

dub 20.12.2020 16:40

После аутентификации вы можете получить идентификатор пользователя с помощью user_id = FirebaseAuth.getInstance().getCurrentUser().getUid();. Теперь вы можете установить такие данные, как FirebaseDatabase.getInstance().getReference("users").child(u‌​ser_id).child("resul‌​t").set(your_data);

Arup 20.12.2020 18:45

Круто спасибо, буду разбираться. Новичок в Android, извините, что спрашиваю основные вещи.

dub 20.12.2020 18:54

Предположим, что у каждого пользователя есть поле с именем status со значениями A, B или C. Вам нужно выбрать только status = 'A'. Как вы можете это сделать? FirebaseDatabase.getInstance().getReference("пользователи").orderBy‌​Child("status").equa‌​lTo("R");

padlanau 29.12.2020 05:23

Другие вопросы по теме