[英]AsyncTask Progress Dialog Not Showing When I Launch My Activity
我的AsyncTask中有一个方法,其中包含它从Parse.com加载的数据。我希望显示“进度对话框”,直到所有数据完全加载为止。
因此,如果数据加载需要5分钟,则进度对话框将显示确切的时间,直到所有数据加载完成。
我尝试了许多其他使用AsyncTask的方法,但仍然没有解决方案。
这很重要,有人可以帮我解决这个问题吗
在我的主要活动的onCreate中:
ProgressDialog progress = new ProgressDialog(this);
new MyTaskUpcomingShows(progress).execute();
我的带有进度对话框的AsycTask:
class MyTaskUpcomingShows extends AsyncTask<Void, Void, Void> {
ProgressDialog progress;
public MyTaskUpcomingShows(ProgressDialog progress) {
this.progress = progress;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progress.setMessage("Loading...");
progress.show();
}
@Override
protected Void doInBackground(Void... arg0) {
parseQueryUpcomingShowsEventsTable();
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
progress.dismiss();
}
}
附加信息:
当我尝试以这种方式执行AsyncTask时,它仅由于Thread.sleep而显示了BUT
private class BackgroundTask extends AsyncTask <Void, Void, Void> {
private ProgressDialog dialog;
public BackgroundTask(MyMainActivity activity) {
dialog = new ProgressDialog(activity);
}
@Override
protected void onPreExecute() {
dialog.setMessage("Doing something, please wait.");
dialog.show();
}
@Override
protected void onPostExecute(Void result) {
if (dialog.isShowing()) {
dialog.dismiss();
}
}
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
问题是,如果我这样删除Thread.sleep(5000),则不会显示进度对话框
同样,如果在5秒钟之前加载数据,进度对话框仍会旋转。 应该在数据加载后立即停止
看来您需要的是这个
class MyTaskUpcomingShows extends AsyncTask<Void, Void, Void> {
ProgressDialog progress;
public MyTaskUpcomingShows() {
//nothing
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progress = ProgressDialog.show(MainActivity.this, "Loading", "Loading...", true, false);
}
问题可能是您用于创建进度对话框的上下文。
尝试使用YourClassName.this作为上下文
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new MyAsyncTask(MainActivity.this).execute("");
}
class MyAsyncTask extends AsyncTask<String,Void,List<Order>>
{
Context _context ;
ProgressDialog progressDialog;
public MyAsyncTask(Context context)
{
this._context = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(_context, "TITLE","MESSAGE");
}
@Override
protected List<Order> doInBackground(String... strings) {
// load your data
return null;
}
@Override
protected void onPostExecute(List<Order> orders) {
super.onPostExecute(orders);
progressDialog.dismiss();
// do your stuff
}
} // END OF ASYNC TASK
} // END OF MainActivity
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.