ProgressDialog与AsyncTask - 不会显示

wha*_*ide 1 android android-asynctask

我知道这个问题已被多次询问,但我有一个显然干净的代码,但是没有用,给我没有例外或任何东西.

我有一个简单的一键Activity(MainActivity).其中的按钮调用AsyncTask以便在后台发送电子邮件.我试着去做我认为这是很常见的事情:显示ProgressDialog任务开始的时间并在结束时解除它.为此,我将上述代码放入AsyncTask.onPreExecute()AsyncTask.onPostExecute().我认为问题出现在Context提供给对话框构造函数中,但我为我创建了一个简单的构造函数,我AsyncTask将其传递给应用程序上下文.我添加了一个简单Toast的调试,但它没有显示...

这是按钮onClick方法的代码:

public void onClick(View v) {
    new Sender(this).execute("args");
}
Run Code Online (Sandbox Code Playgroud)

这是任务的代码:

private class Sender extends AsyncTask<String, Void, Void> {
    private ProgressDialog progDialog;
    private Context context;

    public Sender(Context context) {
        this.context = context;
    }

    @SuppressWarnings("unused")
        protected void onPreExecute(Void... params) {
        Toast.makeText(this.context, "Sending...", Toast.LENGTH_SHORT).show();
        progDialog = ProgressDialog.show(this.context, "Sending", "Picture is being sent...", true);
    }

    protected Void doInBackground(String... mailSubj) {
        // some code that works
        return null;
    }

    @SuppressWarnings("unused")
    protected void onPostExecute(Void... v) {
        progDialog.dismiss();
        Toast.makeText(MainActivity.this, "Mail sent", Toast.LENGTH_SHORT).show();
    }
}
Run Code Online (Sandbox Code Playgroud)

我哪里做错了?

Wen*_*hui 5

您的进度对话框未显示,因为您没有覆盖onPreExecute().添加@Override注释onPreExecute(),看看会发生什么.onPreExecute没有参数.