У меня есть этот фрагмент кода, который захватывает имя пользователя на основе идентификатора:
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 захват имени пользователя?
Попробуйте использовать флаг 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());
}
}
}
});
о, я не знал, что это так просто, я думал, что есть что-то вроде специального метода, чтобы узнать это. Спасибо за помощь!