繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM