我如何知道 firebase firestore 是否已完成读取数据?

How do I know if firebase firestore has finished reading data?

我这里有一段代码可以根据 ID 获取用户名:

    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"/>

然后在您的 activity class 中找到它,如下所示:

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());
            }
        }
    }
});