【问题标题】:Progress Dialog getting dismissed before displaying fetched data from firestore在显示从 Firestore 获取的数据之前,进度对话框被关闭
【发布时间】:2021-08-16 05:36:13
【问题描述】:

我正在从文档中获取数据,然后将其显示在活动中,但显示它需要一些时间,所以我想在工作完成时放置一个对话框。 所以我添加了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 秒的延迟是问题所在。 请帮忙,提前谢谢

【问题讨论】:

    标签: android google-cloud-firestore progressdialog


    【解决方案1】:

    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. stackoverflow 中的另一个用途:ProgressDialog is deprecated.What is the alternate one to use?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 2021-10-24
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多