1

我在继承 AsyncTask 时遇到以下问题:

-编译:
    [javac] 编译6个源文件到C:\DEV\MyProject\bin\classes
    [javac] C:\DEV\MyProject\src\org\example\myproject\MainActivity.java:234: 错误:
方法不会覆盖或实现超类型中的方法
    [javac] @Override
    [javac] ^
    [javac] C:\DEV\MyProject\src\org\example\myproject\MainActivity.java:286: 错误:
方法不会覆盖或实现超类型中的方法
    [javac] @Override
    [javac] ^
    [javac] 2 个错误

我的代码(doInBackground 也在这里,但编译器没有抱怨):


protected class DoThingsTask extends AsyncTask
    @Override
    protected Void doInBackground(String... params)
    {
        // things
    }

    @Override
    protected void onPreExecute(Void... params)
    {
        super.onPreExecute();
        // ... do things
        Log.i(TAG, "AsyncTask: pre-execution done");
    }

    @Override
    protected void onPostExecute(Void... result)
    {
        Log.i(TAG, "AsyncTask: PostExecution start");
        // .... do other things
        Log.d(TAG, "AsyncTask PostExecution done");
    }

所以编译器抱怨@Override注释。如果我删除注释,它编译得很好,但不会调用onPreExecutenor onPostExecute。我不知道为什么它有问题。

我在这里使用命令行 - 所以我ant clean每次都在打电话。

想法赞赏!

4

3 回答 3

3

你的参数是错误的。OnPreExecute 不接受任何参数。onPostExecute 采用 Result 类型的单个参数(其中 result 是您选择的任何单个类型)。它不接受可变参数。

于 2013-05-28T03:54:44.283 回答
1

我的猜测是您的 AsyncTask 类指定了不同的参数类型,例如:

private class Example extends AsyncTask<String, Void, String> {
     @Override 
     protected String doInBackground(String... params) {
       //this is correct @Override, the doInBackground has the same variable type of String
     }

     @Override
     protected void onPostExecute(Void... params) {
       //this is Wrong @Override, the Post result should be String
       //as shown by <String, Void, String>
       //the correct one should be :
       //@Override
       //protected String onPostExecute (String...params) {
       //.....
       //.....}
     }
}

另外,正如Gabe Sechan指出的那样, onPreExecute 不带任何参数,因此不能被覆盖,请尝试将其修改为这个:

@Override
protected void onPreExecute()
{
    super.onPreExecute();
    // ... do things
    Log.i(TAG, "AsyncTask: pre-execution done");
}

编辑,您错误地声明了 asyncTask,您应该指定 asnyctask 的参数,如下所示:

private class Example extends AsyncTask<InputType, ProgressType, ResultType>

如果要使其无效,请Void用作参数类型。

祝你好运^^

于 2013-05-28T04:01:44.917 回答
0

您从 AsyncTask 派生的类应该在其下方有红色波浪线以表示错误。如果按...

视窗: Ctrl + 1

苹果电脑: Command + 1

拉起快速修复(或只是将鼠标悬停在红色波浪上)

它应该说“添加未实现的方法”并为您完成繁重的工作。如果 onPreExecute 和 onPostExecute 没有实现,请右键单击该类并点击源 -> 覆盖/实现方法并找到您要查找的方法。`

于 2013-05-28T04:06:28.040 回答