I am fetching data from document and then displaying it on an activity, but it takes some time to display it so i wanted to put a dialog while the job is geting done. so i added progressdialog (i know it's deprecated, i'll use custom dialog afterwards), but the problem is dialog is getting called and is getting dismissed instantly even before data get displayed. i don't know how to listen if data is got displayed successfully so i can put dismiss method after that. here's code :
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();
}
}
}
the output looks like this : https://i.stack.imgur.com/Yl7JH.jpg
that delay of 0.5 sec or something is the problem. please help, thanks in advance
The
Progress Dialogdismissed instantly because you setPd.dismiss()directly insideonCreatemethod.Set
Pd.dismiss()insideonSuccessso theProgress Dialogwill be dismissed after finish fetching data from Firebase.Progress Dialogis deprecated. You can useProgress Baras its alternative. It's easy to use, all you have to do are:Progress Barelement in xml fileGONEorVISIBLEfor theProgress Barelement in java file.Here are some references for
Progress Bar: