进度对话框在显示从 firestore 获取的数据之前被关闭

Progress Dialog getting dismissed before displaying fetched data from firestore

我正在从文档中获取数据,然后在 activity 上显示它,但是显示它需要一些时间,所以我想在工作完成时放置一个对话框。 所以我添加了 progressdialog(我知道它已被弃用,之后我将使用自定义对话框),但问题是对话框被调用并且甚至在数据显示之前就被立即关闭。如果数据显示成功,我不知道如何收听,所以我可以在那之后放置 dismiss 方法。 这是代码:

package com.example.firestooredemo;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;

import com.firebase.ui.firestore.FirestoreRecyclerOptions;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.Timestamp;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class StudentProfileData extends AppCompatActivity {
    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    String S_ID,id;
    TextView Student,MArks,Time;
//    Timestamp t= new Timestamp("160536400","13000000000");
    Map<String, Object> Stud;
    String TAG = "Datacheck";
    Sdm Stud_Data=new Sdm();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_student_profile_data);

        ProgressDialog Pd=new ProgressDialog(this);
        Pd.setCancelable(false);
        Pd.setMessage("Loading Student Data ...");
        Pd.show();


        Student = findViewById(R.id.Stud_Name);
        Time = findViewById(R.id.Timestamp1);
        MArks = findViewById(R.id.MarksView);
        Intent intent = getIntent();
        S_ID = intent.getStringExtra("S_ID");
        id=intent.getStringExtra("Path");
        DocumentReference Stud_Doc= db.collection("EM_DEMO2").document("10th_STD").collection(S_ID).document(id);
        Stud_Doc.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
            @Override
            public void onSuccess(DocumentSnapshot documentSnapshot) {
                Stud = documentSnapshot.getData();
                Stud_Data.readData(Stud);

                Log.d(TAG,id+documentSnapshot.getData().toString());
                Student.setText(Stud_Data.getStudentname());
                Time.setText(Stud_Data.getDateTime());
                MArks.setText(Stud_Data.getMarks());

            }
        });
        Log.d(TAG,"YAAAY");

        if(Pd.isShowing()){
              Pd.dismiss();
        }

    }

}

输出如下所示: https://imgur.com/a/XoffOYq

0.5 秒左右的延迟就是问题所在。 请帮忙,提前致谢

Progress Dialog 立即关闭,因为您直接在 onCreate 方法中设置 Pd.dismiss()

onSuccess 中设置 Pd.dismiss(),这样 Progress Dialog 将在完成从 Firebase 获取数据后关闭。

Progress Dialog 已弃用。您可以使用 Progress Bar 作为替代。简单易用,您只需:

  1. 在 xml 文件中定义 Progress Bar 元素
  2. 将 java 文件中 Progress Bar 元素的可见性设置为 GONEVISIBLE

这里有一些参考 Progress Bar:

  1. 官方文档:https://developer.android.com/reference/android/widget/ProgressBar
  2. 示例:https://abhiandroid.com/ui/progressbar
  3. Whosebug 中的另一个用途:ProgressDialog is deprecated.What is the alternate one to use?