我的AsyncTask中有一个方法,它包含从Parse.com加载的数据 我想要的是我的进度对话框显示,直到所有数据完全加载。
因此,如果数据加载需要5分钟,则进度对话框应显示所有数据加载完成后的确切时间。
我尝试了许多其他使用AsyncTask的方法,但仍然没有解决方案。
这是非常重要的,任何人都可以帮我解决这个问题
在我的主要活动中创建:
ProgressDialog progress = new ProgressDialog(this);
new MyTaskUpcomingShows(progress).execute();
我的AsycTask With Progress对话框:
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时,它仅显示BUT因为Thread.sleep
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秒之前加载,则进度对话框仍会旋转。它应该在加载数据后立即停止
答案 0 :(得分:0)
看来你需要的是这个
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);
}
答案 1 :(得分:0)
问题可能是您用于创建进度对话框的上下文。
尝试使用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