进度对话框在显示从 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
作为替代。简单易用,您只需:
- 在 xml 文件中定义
Progress Bar
元素
- 将 java 文件中
Progress Bar
元素的可见性设置为 GONE
或 VISIBLE
。
这里有一些参考 Progress Bar
:
- 官方文档:https://developer.android.com/reference/android/widget/ProgressBar
- 示例:https://abhiandroid.com/ui/progressbar
- Whosebug 中的另一个用途:ProgressDialog is deprecated.What is the alternate one to use?
我正在从文档中获取数据,然后在 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
作为替代。简单易用,您只需:
- 在 xml 文件中定义
Progress Bar
元素 - 将 java 文件中
Progress Bar
元素的可见性设置为GONE
或VISIBLE
。
这里有一些参考 Progress Bar
:
- 官方文档:https://developer.android.com/reference/android/widget/ProgressBar
- 示例:https://abhiandroid.com/ui/progressbar
- Whosebug 中的另一个用途:ProgressDialog is deprecated.What is the alternate one to use?