我启动我的活动时不显示AsyncTask进度对话框

时间:2015-10-04 06:22:59

标签: android android-asynctask progressdialog

我的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秒之前加载,则进度对话框仍会旋转。它应该在加载数据后立即停止

2 个答案:

答案 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