Как узнать, закончил ли firebase firestore чтение данных?

У меня есть этот фрагмент кода, который захватывает имя пользователя на основе идентификатора:

    DocumentReference df = fstore.collection("Users").document(user.getUid());
    df.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful())
            {
                DocumentSnapshot doc = task.getResult();
                if (doc.exists())
                {
                    username.setText("@"+ doc.get("Username").toString());
                }
            }
        }
    });

Но я заметил, что для изменения имени пользователя при запуске приложения требуется некоторое время. Я хочу отображать индикатор выполнения, пока Firestore извлекает данные, и отключать его после завершения. Как узнать, закончил ли Firestore захват имени пользователя?

Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
0
26
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте использовать флаг inProgress. Установите флаг на true, когда вы собираетесь сделать вызов для получения данных, и верните его на false, как только закончите. Используйте этот флаг, чтобы знать, когда отображать индикатор выполнения (или индикатор загрузки).

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

Самым простым решением было бы добавить ProgressBar в файл макета. Предполагая, что у вас есть ConstraintLayout, вы можете добавить его следующим образом:

<ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:visibility="gone"/>

А затем найдите его в своем классе активности следующим образом:

ProgressBar progressBar = findViewById(R.layout.progressBar)

И используйте его таким образом:

progressBar.setVisibility(View.VISIBLE) \\👈 display it.
DocumentReference df = fstore.collection("Users").document(user.getUid());
df.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            progressBar.setVisibility(View.GONE) \\👈 hide it.
            DocumentSnapshot doc = task.getResult();
            if (doc.exists()) {
                username.setText("@"+ doc.get("Username").toString());
            }
        }
    }
});

о, я не знал, что это так просто, я думал, что есть что-то вроде специального метода, чтобы узнать это. Спасибо за помощь!

Yassine 09.04.2022 19:16

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