1

我知道这个问题已被多次问过,但我有一个明显干净的代码,但它不起作用,没有给我任何异常或任何东西。

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

这是按钮onClick方法的代码:

public void onClick(View v) {
    new Sender(this).execute("args");
}

这是任务的代码:

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();
    }
}

我哪里做错了?

4

2 回答 2

5

您的进度对话框未显示,因为您没有覆盖onPreExecute(). 添加@Override注释到你的onPreExecute(),看看会发生什么。onPreExecute不接受任何论据。

于 2013-01-17T23:59:52.400 回答
0

我发现了错误,解决方案很简单:添加Void参数列表onPreExecute()onPostExecute()导致 Java 不覆盖AsyncTask. 第一个不需要参数,后者需要一个 Result (在这种情况下Void)参数。这个问题可以关闭。

于 2013-01-18T00:07:14.650 回答