无法从静态上下文引用非静态方法execute()

use*_*_00 4 java android

我不明白为什么我收到这个编译错误; 这里涉及的任何类或方法都不是静态的.也许有人可以在这里说清楚.

在我的MainActivity类中,我声明了一个扩展AsyncTask的公共类:

public class AsyncStuff extends AsyncTask<String, Void, String> {
    ...
}
Run Code Online (Sandbox Code Playgroud)

在我的非活动类中,我有一个应该触发异步任务的公共函数:

public class Util {
    public void ExecuteAsyncMethod(){
        MainActivity.AsyncStuff.execute(new String[]{"test" }); // error here
    }
}
Run Code Online (Sandbox Code Playgroud)

我还尝试实例化MainActivity.AsyncStuff类的对象并执行其execute()方法,但这不起作用,因为它不在封闭类中.我无法将其移动到其他地方,因为我需要更新UI,因此需要保留在MainActivity类中.

无论如何,我需要帮助来弄清楚为什么我的ExecuteAsyncMethod()方法不能编译.

谢谢!!

小智 7

定义如下:

public static class AsyncStuff extends AsyncTask<String, Void, String> {
    ...
}
Run Code Online (Sandbox Code Playgroud)

并运行如下:

public class Util {
    public void ExecuteAsyncMethod(){
        new AsyncStuff().execute(new String[]{"test" });
    }
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*gun 5

您收到该错误的原因是您必须实例化您的AsyncTask,您试图将execute()其作为静态方法进行调用。

至于您是否可以移动您的AsyncTask,是的,您可以,只需将类设为静态(或使其完全成为自己的类)并对活动有一个弱引用,因此如果它在您之前完成,您不要将它保存在 ram 中AsyncTask. 无论您是否将其保留在内部,这都是您想做的事情MainActivity