Android AsyncTask onPreExecute 未被不确定地调用

标签 android android-asynctask

我有一个 AsyncTask,它应该在通过 Internet 上传一些内容时显示进度条。有时它就像一个魅力,有时它不显示任何进度条。这是代码:

public class Upload extends AsyncTask<Void, Void, Void> {

    private ProgressDialog dialog = new ProgressDialog(Activity.this);

    protected void onPreExecute() {
        dialog = ProgressDialog.show(Activity.this, "wait...", "", true, true);
    }
    @Override
    protected Void doInBackground(Void... params) {
        //upload stuff
        return null;
    }

    protected void onPostExecute(Void result) {

        try {
            if (dialog.isShowing())
                dialog.dismiss();
            dialog = null;
        } catch (Exception e) {
            // nothing
        }
        Intent next = new Intent(getApplicationContext(), SecondActivity.class);
        startActivity(next);
        }
    }
}

doInBackground 和 onPostExecute 始终有效,有时它们一起工作就像一个魅力。但有时,上传时没有进度条。这是竞争条件吗?我不这么认为,但我找不到任何解释。

最佳答案

您在类里面创建了两次对象。 ProgressDialog.show 已经返回一个创建的 ProgressDialog 对象,但是您首先在顶部实例化了它。 ProgressDialog 应实例化一次,因此请尝试删除顶部的实例化并重试,如下所示:

private ProgressDialog dialog;

protected void onPreExecute() {
    dialog = ProgressDialog.show(Activity.this, "wait...", "", true, true);
}

关于Android AsyncTask onPreExecute 未被不确定地调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11943133/

相关文章:

android - 覆盖 AsyncTasks 构造函数时我应该调用 super() 吗?

java - Firebase Auth 帐户已创建,但在完整监听器上从未调用过

java - 使用 Dagger 注入(inject) Activity

java - Android退出AsyncTask问题

连接到 mysql 服务器的 Android 应用程序返回用 [] 、 {} 和双引号括起来的值

android - 与同时异步任务的 SQLite 的多个连接

android:targetPackage 无法解析符号

c# - 隐藏用于 editText 焦点/触摸的软键盘

java - 使用 getText() 并将其附加到我的微调器时出错

java - 在后台加载图像、视频